使用 .NET 7、Blazor 和 .NET MAUI 构建你自己的 Podcast App

点击上方蓝字

关注我们

(本文阅读时间:11分钟)

.NET Podcast App 首次在 .NET Conf 2021上推出,最近进行了更新以在 .NET Conf 2022 keynote 中突出显示 .NET 7 中的新功能。该 Podcast App 已准备好使用展示 .NET,ASP.NET Core,Blazor,.NET MAUI,Azure Container Apps,Orleans,Power Platform,Playwright 等示例应用程序。在本文中,我将解释所有新功能并展示我们如何升级 .NET Podcast App 以利用它们。

abba3d9dc639038806db4ad961e094df.png

  • .NET Podcast App

    https://github.com/microsoft/dotnet-podcasts

0b2ac500f08f4edd66ff845dbf777f61.png

架构

5a7b5a83abdd712fae0cf9480c1b08c9.png

如前所述,.NET Podcast App 使用云原生架构来支持移动、桌面和 Web 应用程序。微服务用于添加和更新 podcasts 提要的工作服务以及为应用程序提供数据的 API。这些都由 Azure Container Apps 提供支持,以根据每个服务的不同特征动态扩展微服务。

  • Azure Container Apps

    https://learn.microsoft.com/azure/container-apps/overview?ocid=AID3052907

5f19e1646a394df88c0b48b2d39c2530.png

.NET Podcast App 还有很多其他功能,包括为我们的数据库集成到 Azure SQL Server,用于保存图像和排队提交的 Azure Storage,以及用于利用 Power Apps 和 Power Automate 中的 API 的 Azure API Management。

841e673e5476cb0754ab902030b178c6.png

API 更新

78032406870d53c954333826c9ed3b27.png

.NET Podcast API 已更新为使用 ASP.NET Core 中的最新功能,包括输出缓存、速率限制、API 版本控制和用于最小 API 的新路由组。此外,它将最新的增强功能与身份验证和授权集成在一起,为开发人员大大简化了这些功能。

// Authentication and authorization-related services


builder.Services.AddMicrosoftIdentityWebApiAuthentication(builder.Configuration);


builder.Services.AddAuthorizationBuilder().AddPolicy("modify_feeds", policy => policy.RequireScope("API.Access"));


// OpenAPI and versioning-related services
builder.Services.AddSwaggerGen();
builder.Services.Configure<SwaggerGeneratorOptions>(opts =>
{
    opts.InferSecuritySchemes = true;
});
builder.Services.AddEndpointsApiExplorer();
builder.Services.AddApiVersioning(options =>
{
    options.DefaultApiVersion = new ApiVersion(2, 0);
    options.ReportApiVersions = true;
    options.AssumeDefaultVersionWhenUnspecified = true;
    options.ApiVersionReader = new HeaderApiVersionReader("api-version");
});


// Enable Output Cache
builder.Services.AddOutputCache();


// Rate-limiting and output caching-related services
builder.Services.AddRateLimiter(options => options.AddFixedWindowLimiter("feeds", options =>
{
    options.PermitLimit = 5;
    options.QueueProcessingOrder = QueueProcessingOrder.OldestFirst;
    options.QueueLimit = 0;
    options.Window = TimeSpan.FromSeconds(2);
    options.AutoReplenishment = false;
}));


// Create version set
var versionSet = app.NewApiVersionSet()
                    .HasApiVersion(1.0)
                    .HasApiVersion(2.0)
                    .ReportApiVersions()
                    .Build();


// create new mapping for apis
var shows = app.MapGroup("/shows");


shows
    .MapShowsApi()
    .WithApiVersionSet(versionSet)
    .MapToApiVersion(1.0)
    .MapToApiVersion(2.0);

25f3a0b2091b26c54888fded8608f7c5.png

可观察性和监控

fc29d54aa0b63909f9eae56ad745854b.png

构建和部署服务器后,你需要观察和监控它们。在我们的主题演讲中,我们展示了如何通过几行代码集成 Open Telemetry、Azure Monitor 等,以此完全检测你的服务器。

builder.Services.AddOpenTelemetryTracing(tracing =>
        tracing.SetResourceBuilder(serviceResource)
        .AddAzureMonitorTraceExporter(o =>
        {
            o.ConnectionString = azureMonitorConnectionString;
        })
        .AddJaegerExporter()
        .AddHttpClientInstrumentation()
        .AddAspNetCoreInstrumentation()
        .AddEntityFrameworkCoreInstrumentation()
    );


builder.Services.AddOpenTelemetryMetrics(metrics =>
{
    metrics
    .SetResourceBuilder(serviceResource)
    .AddPrometheusExporter()
    .AddAzureMonitorMetricExporter(o =>
    {
        o.ConnectionString = azureMonitorConnectionString;
    })
    .AddAspNetCoreInstrumentation()
    .AddHttpClientInstrumentation()
    .AddRuntimeInstrumentation()
    .AddProcessInstrumentation()
    .AddHttpClientInstrumentation()
    .AddEventCountersInstrumentation(ec =>
    {
        ec.AddEventSources("Microsoft.AspNetCore.Hosting");
    });
});


builder.Logging.AddOpenTelemetry(logging =>
{
    logging
    .SetResourceBuilder(serviceResource)
    .AddAzureMonitorLogExporter(o =>
    {
        o.ConnectionString = azureMonitorConnectionString;
    })
    .AttachLogsToActivityEvent();
});

0e9526bb79c7674d50a7ec701d2112d3.png

.NET SDK 容器

5cb5922e00841ada6c7c5e06e51e3c0d.png

.NET Podcast 应用程序由微服务和容器提供支持。.NET SDK 现在只需更改几处配置即可将你的应用程序容器化。此功能现已集成到为 .NET Podcast 应用程序和 CI/CD pipeline 提供支持的服务中。

<PropertyGroup>
    <ContainerImageName>podcastapi</ContainerImageName>
</PropertyGroup>


<ItemGroup>
    <PackageReference Include="Microsoft.NET.Build.Containers" Version="0.2.7" />
</ItemGroup>
dotnet publish -c Release -r linux-x64 -p PublishProfile=DefaultContainer src/Services/Podcasts/Podcast.API/Podcast.API.csproj

d32b0f50e037785058c0738426669335.png

Playwright 测试

669640d714e348095025958ed1e948fb.png

Playwright 是由微软创建和维护的开源测试工具,为现代 web 应用程序提供可靠的端到端测试。当团队更新后端和前端更新时,他们希望博客应用程序的主要功能不会被破坏。他们设置了几个 Playwright 测试,并将其集成到 CI 管道中,这样一旦有了拉取请求,管道就会运行。

9fd8e5bbfbf96afc18be98cd7f2ce6aa.png

219346cf9392379ea40d3df5116c4bb7.png

Power Apps 集成

3407e5f644f657e2655d3501eb1fe4fe.png

使用 Azure API Management(APIM) ,你可以轻松地使用 .NET APIs,让其支持更多的服务和应用程序,包括 Power Apps。在 .NET Conf 2022 中, 我们展示了:通过 APIs 浅层的 .NET APIs,Power Apps 能够对批准和拒绝新的播客提交进行分类。现在 repo 中包括可以由你自己部署的 Power Apps。

55ecff3d8bc31ed76c4918014a5f64cb.jpeg

  • Azure API Management

    https://learn.microsoft.com/azure/api-management/?ocid=AID3052907

d8cba4de556c36c1e3302a540be3ed03.gif

GitHub 存储库有新手指导,介绍了如何轻松地让整个应用程序在本地运行,只需一个简单的命令就能进行开发。此外,你可以通过在克隆的 repo 中设置一些 GitHub secrets 来用 GitHub Actions 实现完整的持续集成和部署管道,将整个解决方案部署到 Azure 平台上。除了运行应用程序,你还可以在新手指导中找到 .NET Conf 的所有 demo。

我们将继续为应用程序添加新功能,也会关注你所感兴趣的内容以及你正在使用此示例架构构建的内容。有任何反馈,请前往 GitHub 讨论组。

  • 新手指导

    https://github.com/microsoft/dotnet-podcasts#local-deployment-quickstart

  • GitHub 讨论组

    https://github.com/microsoft/dotnet-podcasts/discussions

*未经授权请勿私自转载此文章及图片。

5489e1a6044cb4d260d7ab10fa16712e.png

扫码前往原博客,获取相关链接、文档和视频。

6217e3c77cb4b59b7bf4500830238567.png

09b9fa9a8b25687f204923ae7aa892b4.png

欢迎转发

fe0c904069c5567aba90d80bac3ceb9f.gif

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值