C# 运行状况检查响应缺少.json扩展名
我已与一位响应作者进行了健康检查:C# 运行状况检查响应缺少.json扩展名,c#,asp.net-core,health-monitoring,C#,Asp.net Core,Health Monitoring,我已与一位响应作者进行了健康检查: services.AddHealthChecks() .AddCheck("My Health Check", new MyHealthCheck(aVariable)); app.UseHealthChecks("/health", new HealthCheckOptions() { ResponseWriter = WriteHealthCheckResponse }); private static Task WriteHealth
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。浏览器无法识别没有扩展名的文件,也不想打开它,因此我想控制文件名
如何控制响应的文件名
更新:
当健康检查通过时,我现在do得到一个health.json文件(可以打开)。
但是,当健康检查失败时,我会得到一个健康文件
尝试下载失败的健康消息(health without.json扩展名),我只得到一个可以打开的部分下载,但保持为空
那么,这段代码中的非快乐流有什么问题
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);}
公共任务CheckHealthAsync(HealthCheckContext上下文,CancellationToken CancellationToken=default(CancellationToken)){
var isHealthy=假;
尝试
{
var executionResult=_service.ExecuteExample();
isHealthy=executionResult!=null;
}
抓住
{
//这不应引发异常。
}
HealthCheckResult healthResult=isHealthy
?HealthCheckResult.health(“服务按预期响应”)
:HealthCheckResult.unhealth(“服务有问题”);
返回Task.FromResult(healthResult);}
我的代码在同事的机器上运行得很好。 最终看来,Internet Explorer 11是罪魁祸首。在Chrome中,它只起作用 更新和解决方案: 多亏了马丁·利弗塞奇,我找到了答案。 通过在IE中使用F12开发者工具,我发现Unhealth上的HTTP状态代码是503服务不可用。这会阻止IE下载.json结果 现在,可以通过设置HealthCheckOptions轻松解决此问题:
app.UseHealthChecks("/health", new HealthCheckOptions()
{
ResultStatusCodes = { [HealthStatus.Unhealthy] = 200 },
ResponseWriter = WriteHealthCheckResponse
});
如果根据.json文件的内容集成运行状况检查,请使用此选项。当您只查看HTTP状态时,请不要这样做。“当然,浏览器无法识别没有扩展名的文件。”-您的期望是什么?“不认识”是什么意思?您的意思是它不会提示您下载JSON响应吗?添加到问题:通过控制文件名,浏览器可以识别文件类型并直接打开文件。我的浏览器会很高兴地为我显示JSON。您确定内容类型标题正在生效吗?您只需将.json扩展名添加到浏览器URL中,即可告诉浏览器所需的内容。这在ChromeYou中起作用。您正确地将响应的
内容类型设置为应用程序/json
。浏览器处理JSON的方式不在您的控制范围之内,但它可能会受到URL(以.JSON
结尾)的影响,尤其是在扩展映射到应用程序的Windows上。但是,文件扩展名的概念不是HTTP的一部分。也就是说,您可以使用标题指示浏览器使用指定的文件名保存文件。但是,这通常用于下载,而不是JSON响应。这可能是因为IE在没有服务的情况下以失败状态下载请求的结果,我也注意到了这一点,它实际上下载了一个与URL路径同名的文件,在本例中为healthcheck
。您的成功响应返回一个文件,因此该文件就是下载的文件,healthcheck.json