You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

.NET 8 Worker项目配置Kestrel托管健康检查端点失效问题

.NET 8 Worker项目配置Kestrel托管健康检查端点的正确方式

针对你在.NET 8 Worker项目中无法复用.NET 5健康检查配置的问题,以下是适配.NET 8的解决方案:

核心调整点

.NET 8对Worker项目的Web托管配置做了简化,不再强制依赖Startup类,推荐直接使用最小API风格的中间件配置方式。

步骤1:安装必要NuGet包

确保项目已安装健康检查相关包:

Install-Package Microsoft.AspNetCore.Diagnostics.HealthChecks

步骤2:修改Program.cs配置

方式一:基于Host构建器(保留Worker项目原有结构)

var host = Host.CreateDefaultBuilder(args)
    .ConfigureWebHostDefaults(webBuilder =>
    {
        webBuilder.UseKestrel();
        // 直接在Configure中配置健康检查端点,替代原Startup类
        webBuilder.Configure(app =>
        {
            var allPredicate = new HealthCheckOptions()
            {
                Predicate = _ => true,
                ResponseWriter = HealthCheckTools.WriteResponse
            };

            app.MapHealthChecks("/hc", allPredicate);
            app.MapHealthChecks("/hc/startup", allPredicate);
            app.MapHealthChecks("/hc/ready", allPredicate);
            app.MapHealthChecks("/hc/live", allPredicate);
        });
    })
    .ConfigureServices(services =>
    {
        services.AddHostedService<Worker>();
        // 必须注册健康检查服务
        services.AddHealthChecks();
    })
    .Build();

await host.RunAsync();

方式二:基于WebApplication构建器(更贴合.NET 8极简风格)

这种方式将Worker服务整合到Web应用构建流程中,配置更简洁:

var builder = WebApplication.CreateBuilder(args);

// 添加Worker后台服务
builder.Services.AddHostedService<Worker>();
// 注册健康检查服务
builder.Services.AddHealthChecks();

var app = builder.Build();

// 配置健康检查端点
var allPredicate = new HealthCheckOptions()
{
    Predicate = _ => true,
    ResponseWriter = HealthCheckTools.WriteResponse
};

app.MapHealthChecks("/hc", allPredicate);
app.MapHealthChecks("/hc/startup", allPredicate);
app.MapHealthChecks("/hc/ready", allPredicate);
app.MapHealthChecks("/hc/live", allPredicate);

await app.RunAsync();

为什么原.NET 5配置失效?

原配置依赖UseStartup<Startup>,但.NET 8中,Worker项目的Web托管默认启用了最小API模式,若Startup类未适配.NET 8的中间件注册逻辑(比如未正确调用app.UseRouting()和app.UseEndpoints()),会导致端点无法被正确映射。直接在Configure中配置端点的方式更可靠,也符合.NET 8的设计趋势。

内容的提问来源于stack exchange,提问作者Amir Borzoei

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.25 02:19:57