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

部署IIS时AspNetCore.HealthChecks.UI无法获取端点URI问题

AspNetCore.HealthChecks.UI IIS部署相对路径报错解决办法

问题根源

IIS托管环境下,HealthChecks.UI的静态资源请求上下文和健康检查端点的路由上下文存在差异——哪怕你直接在浏览器访问/healthchecks能拿到正常JSON响应,UI的后端请求逻辑也无法正确解析这种纯斜杠开头的相对路径,导致出现「无法从配置获取端点URI」的错误。

具体解决步骤

1. 修改配置文件用~/替代/

把appsettings.json里的健康检查Uri改成带~/的相对路径,让UI基于当前应用的虚拟路径(IIS站点的应用程序路径)解析地址:

{
  "HealthChecksUI": {
    "HealthChecks": [
      {
        "Name": "我的应用健康检查",
        "Uri": "~/healthchecks"
      }
    ],
    "EvaluationTimeInSeconds": 10,
    "MinimumSecondsBetweenFailureNotifications": 60
  }
}

2. 配置应用识别IIS虚拟路径

如果你的IIS站点设置了虚拟路径(比如/MyApp),在Program.cs里加上PathBase的配置,让应用适配IIS的路径规则:

var builder = WebApplication.CreateBuilder(args);

// 注册健康检查服务
builder.Services.AddHealthChecks()
    .AddCheck<SampleHealthCheck>("示例检查");

builder.Services.AddHealthChecksUI()
    .AddInMemoryStorage();

var app = builder.Build();

// 读取IIS虚拟路径配置,没有则默认根路径
var pathBase = builder.Configuration["ASPNETCORE_PATHBASE"] ?? "/";
app.UsePathBase(pathBase);

// 映射健康检查端点
app.MapHealthChecks("/healthchecks", new HealthCheckOptions
{
    ResponseWriter = UIResponseWriter.WriteHealthCheckUIResponse
});

// 映射UI页面
app.MapHealthChecksUI(options =>
{
    options.UIPath = "/healthchecks-ui";
});

app.Run();

3. 验证IIS站点配置

  • 应用程序池必须设置为**.NET Core托管模式**(选择「无托管代码」)
  • 如果站点有虚拟路径,确保ASPNETCORE_PATHBASE环境变量或配置文件中填写了对应路径值
  • 再次确认/healthchecks能直接访问并返回正常JSON响应

4. 动态拼接地址的兜底方案

要是上面的配置仍有问题,可以在代码中动态生成健康检查地址,彻底避免硬编码:

builder.Services.AddHealthChecksUI(options =>
{
    var pathBase = builder.Configuration["ASPNETCORE_PATHBASE"] ?? "/";
    options.AddHealthCheckEndpoint("我的应用健康检查", $"{pathBase}healthchecks");
}).AddInMemoryStorage();

这种方式会在应用启动时自动根据当前基地址拼接完整的端点路径,无需用户手动配置绝对地址。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.01 23:35:11