使用 .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 讨论组。

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

相关内容

热门资讯

【NI Multisim 14...   目录 序言 一、工具栏 🍊1.“标准”工具栏 🍊 2.视图工具...
银河麒麟V10SP1高级服务器... 银河麒麟高级服务器操作系统简介: 银河麒麟高级服务器操作系统V10是针对企业级关键业务...
不能访问光猫的的管理页面 光猫是现代家庭宽带网络的重要组成部分,它可以提供高速稳定的网络连接。但是,有时候我们会遇到不能访问光...
AWSECS:访问外部网络时出... 如果您在AWS ECS中部署了应用程序,并且该应用程序需要访问外部网络,但是无法正常访问,可能是因为...
Android|无法访问或保存... 这个问题可能是由于权限设置不正确导致的。您需要在应用程序清单文件中添加以下代码来请求适当的权限:此外...
北信源内网安全管理卸载 北信源内网安全管理是一款网络安全管理软件,主要用于保护内网安全。在日常使用过程中,卸载该软件是一种常...
AWSElasticBeans... 在Dockerfile中手动配置nginx反向代理。例如,在Dockerfile中添加以下代码:FR...
AsusVivobook无法开... 首先,我们可以尝试重置BIOS(Basic Input/Output System)来解决这个问题。...
ASM贪吃蛇游戏-解决错误的问... 要解决ASM贪吃蛇游戏中的错误问题,你可以按照以下步骤进行:首先,确定错误的具体表现和问题所在。在贪...
月入8000+的steam搬砖... 大家好,我是阿阳 今天要给大家介绍的是 steam 游戏搬砖项目,目前...