使用 .NET 7Blazor 和 .NET MAUI 构建你自己的 Podcast App
Posted dotNET跨平台
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了使用 .NET 7Blazor 和 .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 以利用它们。
.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 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);
可观察性和监控
构建和部署服务器后,你需要观察和监控它们。在我们的主题演讲中,我们展示了如何通过几行代码集成 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
*未经授权请勿私自转载此文章及图片。
扫码前往原博客,获取相关链接、文档和视频。
欢迎转发
以上是关于使用 .NET 7Blazor 和 .NET MAUI 构建你自己的 Podcast App的主要内容,如果未能解决你的问题,请参考以下文章