使用 .NET 7、Blazor 和 .NET MAUI 构建你自己的 Podcast App
创始人
2024-05-13 03:37:13
0

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

.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 servicesbuilder.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 管道中,这样一旦有了拉取请求,管道就会运行。

Power Apps 集成

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

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

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

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

相关内容

热门资讯

保存时出现了1个错误,导致这篇... 当保存文章时出现错误时,可以通过以下步骤解决问题:查看错误信息:查看错误提示信息可以帮助我们了解具体...
汇川伺服电机位置控制模式参数配... 1. 基本控制参数设置 1)设置位置控制模式   2)绝对值位置线性模...
不能访问光猫的的管理页面 光猫是现代家庭宽带网络的重要组成部分,它可以提供高速稳定的网络连接。但是,有时候我们会遇到不能访问光...
表格中数据未显示 当表格中的数据未显示时,可能是由于以下几个原因导致的:HTML代码问题:检查表格的HTML代码是否正...
本地主机上的图像未显示 问题描述:在本地主机上显示图像时,图像未能正常显示。解决方法:以下是一些可能的解决方法,具体取决于问...
表格列调整大小出现问题 问题描述:表格列调整大小出现问题,无法正常调整列宽。解决方法:检查表格的布局方式是否正确。确保表格使...
不一致的条件格式 要解决不一致的条件格式问题,可以按照以下步骤进行:确定条件格式的规则:首先,需要明确条件格式的规则是...
Android|无法访问或保存... 这个问题可能是由于权限设置不正确导致的。您需要在应用程序清单文件中添加以下代码来请求适当的权限:此外...
【NI Multisim 14...   目录 序言 一、工具栏 🍊1.“标准”工具栏 🍊 2.视图工具...
银河麒麟V10SP1高级服务器... 银河麒麟高级服务器操作系统简介: 银河麒麟高级服务器操作系统V10是针对企业级关键业务...