查看原文
其他

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

James Montemagno 微软开发者MSDN 2023-01-21

点击上方蓝字

关注我们

(本文阅读时间: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 以利用它们。

  • .NET Podcast App
    https://github.com/microsoft/dotnet-podcasts




架构


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

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


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


API 更新


.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 servicesbuilder.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 Cachebuilder.Services.AddOutputCache();
// Rate-limiting and output caching-related servicesbuilder.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 setvar versionSet = app.NewApiVersionSet() .HasApiVersion(1.0) .HasApiVersion(2.0) .ReportApiVersions() .Build();
// create new mapping for apisvar shows = app.MapGroup("/shows");
shows .MapShowsApi() .WithApiVersionSet(versionSet) .MapToApiVersion(1.0)    .MapToApiVersion(2.0);



可观察性和监控


构建和部署服务器后,你需要观察和监控它们。在我们的主题演讲中,我们展示了如何通过几行代码集成 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();});



.NET SDK 容器


.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



Playwright 测试


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


Power Apps 集成


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

  • Azure API Management

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


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


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

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


欢迎转发

您可能也对以下帖子感兴趣

文章有问题?点此查看未经处理的缓存