我已经使用ResponseWriter实现了健康检查:
services.AddHealthChecks()
.AddCheck("My Health Check", new MyHealthCheck(aVariable));
app.UseHealthChecks("/health", new HealthCheckOptions()
{
ResponseWriter = WriteHealthCheckResponse
});
private static Task WriteHealthCheckResponse(HttpContext httpContext, HealthReport result){
httpContext.Response.ContentType = "application/json";
var json = new JObject(
new JProperty("status", result.Status.ToString()),
new JProperty("results", new JObject(result.Entries.Select(pair =>
new JProperty(pair.Key, new JObject(
new JProperty("status", pair.Value.Status.ToString()),
new JProperty("description", pair.Value.Description)))))));
return httpContext.Response.WriteAsync(
json.ToString(Formatting.Indented));}
我希望它返回一个 health.json 文件,但是它只返回 health 。浏览器无法识别没有扩展名的文件,也不想打开它,因此我想控制文件名。
如何控制响应的文件名?
更新:
运行状况检查通过后,我现在执行操作,获得一个 health.json 文件(可以打开)。 但是,如果运行状况检查失败,我会得到一个 health 文件。
尝试下载失败的 health 消息(不带.json扩展名的health),我只能部分下载,可以打开,但保持空白。
因此,这段代码中的不愉快流程有什么问题:
public Task<HealthCheckResult> CheckHealthAsync(HealthCheckContext context, CancellationToken cancellationToken = default(CancellationToken)){
var isHealthy = false;
try
{
var executionResult = _service.ExecuteExample();
isHealthy = executionResult != null;
}
catch
{
//This should not throw an exception.
}
HealthCheckResult healthResult = isHealthy
? HealthCheckResult.Healthy("The service is responding as expected.")
: HealthCheckResult.Unhealthy("There is a problem with the service.");
return Task.FromResult(healthResult);}
答案 0 :(得分:0)
我的代码在我的同事计算机上运行得很好。 最后,似乎Internet Explorer 11才是罪魁祸首。在Chrome中就可以使用。.
更新和解决方案: 多亏了Martin Liversage,我找到了答案。 通过在IE中使用F12开发人员工具,我发现不正常的HTTP状态代码为 503 Service Unavailable 。这样可以防止IE下载.json结果。
现在,可以通过设置HealthCheckOptions来轻松解决此问题:
app.UseHealthChecks("/health", new HealthCheckOptions()
{
ResultStatusCodes = { [HealthStatus.Unhealthy] = 200 },
ResponseWriter = WriteHealthCheckResponse
});
如果您基于.json文件的内容集成运行状况检查,请使用此选项。当您只查看HTTP状态时不要。