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

.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 7、Blazor 和 .NET MAUI 构建你自己的 Podcast App_第1张图片

架构

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

使用 .NET 7、Blazor 和 .NET MAUI 构建你自己的 Podcast App_第2张图片

.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 services
builder.Services.AddSwaggerGen();
builder.Services.Configure(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);

可观察性和监控

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


    podcastapi



    

dotnet publish -c Release -r linux-x64 -p PublishProfile=DefaultContainer src/Services/Podcasts/Podcast.API/Podcast.API.csproj

Playwright 测试

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

使用 .NET 7、Blazor 和 .NET MAUI 构建你自己的 Podcast App_第3张图片

Power Apps 集成

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

使用 .NET 7、Blazor 和 .NET MAUI 构建你自己的 Podcast App_第4张图片

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

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

点我前往原博客,获取相关链接、文档和视频~

你可能感兴趣的:(.net)