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

HealthCheckUI遇'UnExpected Character 'H''错误,求助适配非JSON健康检查

解决方案:适配AspNetCore HealthCheckUI与非JSON健康检查响应

HealthCheckUI的核心设计依赖ASP.NET Core健康检查的标准JSON输出格式,默认无法直接适配纯字符串响应,不过可以通过以下两种方式解决问题:

1. 修改健康检查端点输出为标准JSON(推荐)

如果能控制健康检查端点的代码,直接通过ResponseWriter定制输出格式,让它返回UI可解析的JSON:

app.MapHealthChecks("/health", new HealthCheckOptions
{
    ResponseWriter = async (context, report) =>
    {
        // 根据健康状态生成符合UI要求的JSON结构
        var jsonResponse = report.Status == HealthStatus.Healthy
            ? "{\"status\":\"Healthy\"}"
            : "{\"status\":\"Unhealthy\"}";
        
        context.Response.ContentType = "application/json";
        await context.Response.WriteAsync(jsonResponse);
    }
});

这种方式既保留了你的业务逻辑,又完全符合HealthCheckUI的解析要求,不会引入额外维护成本。

2. 代理转换非JSON响应(适用于无法修改原端点的场景)

如果健康检查是第三方服务提供的,没法修改其返回内容,可以在你的项目中新增一个代理端点,将纯字符串响应转换为标准JSON:

[HttpGet("/proxy-health")]
public async Task<IActionResult> ProxyHealthCheck()
{
    using var httpClient = new HttpClient();
    var rawResponse = await httpClient.GetStringAsync("原健康检查端点地址");
    
    return rawResponse.Equals("Healthy", StringComparison.OrdinalIgnoreCase)
        ? Ok(new { status = "Healthy" })
        : StatusCode(503, new { status = "Unhealthy" });
}

之后在HealthCheckUI的配置中,把监控目标改为这个/proxy-health端点即可。

不推荐的方案:修改HealthCheckUI解析逻辑

官方包没有提供跳过JSON校验的配置项,硬改UI的解析逻辑需要fork源码修改前端或后端的解析逻辑,会大幅增加后续版本升级的维护成本,不建议采用。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.24 12:57:36