我在.net8.0中有一个项目Sdk =“Microsoft.NET.Sdk.Worker”,我想在该项目中使用kestrel来托管一些端点以进行健康检查。我在 .net 5.0 中做到了这一点,但在 .net 8.0 中不起作用。 这是 .net 5 的示例代码:
.ConfigureWebHostDefaults(webBuilder =>
{
webBuilder.UseKestrel();
webBuilder.UseStartup<Startup>();
})
app.UseEndpoints(endpoints =>
{
var allPredicate = new HealthCheckOptions()
{
Predicate = _ => true,
ResponseWriter = HealthCheckTools.WriteResponse
};
endpoints.MapHealthChecks("/hc", allPredicate);
endpoints.MapHealthChecks("/hc/startup", allPredicate);
endpoints.MapHealthChecks("/hc/ready", allPredicate);
endpoints.MapHealthChecks("/hc/live", allPredicate);
});
HealthCheckEndpointRouteBuilderExtensions.MapHealthChecks
是 Microsoft.AspNetCore.App.Ref
metapackage 的一部分,使用它的最简单的选择就是切换到 Web
SDK:
<Project Sdk="Microsoft.NET.Sdk.Web">
<PropertyGroup>
<TargetFramework>net8.0</TargetFramework>
</PropertyGroup>
...
</Project>
因此,只需创建一个普通的 ASP.NET Core 应用程序(没有任何端点)并向其中添加托管服务。
FrameworkReference
和 Microsoft.AspNetCore.App
,但可以说它没有多大意义/区别。