0

我想设置 Microsoft.Extensions.Diagnostics.HealthChecks 以便我可以在控制器中设置响应主体,而不是在 Startup.cs 中设置标准设置。这可能吗?如果是这样,我怎样才能做到这一点?

这里的想法是我想控制响应负载设置器逻辑,并在控制器操作/方法中执行此操作。

在线包含有关如何设置健康检查探针的明确说明,但所有示例都显示了在 Startup.cs 中进行的设置。

https://docs.microsoft.com/en-us/aspnet/core/host-and-deploy/health-checks?view=aspnetcore-3.1

探针是否仅在启动时严格设置?这是一个约束吗?

我的理解是,healthcheck 库是中间件,它将终止请求,使其不再进入中间件管道,并且可能删除中间件意味着在启动时设置的任何内容现在都必须在控制器操作方法中设置。

4

1 回答 1

2

是否可以在控制器操作方法中设置健康检查探针?答案是否定的

您可以使用app.UseHealthChecks对健康检查点进行自定义控制

app.UseHealthChecks("/health-detailed", new HealthCheckOptions
        {
            ResponseWriter = (context, result) =>
            {
                context.Response.ContentType = "application/json";
                
                var json = new JObject(
                    new JProperty("status", result.Status.ToString()),
                    new JProperty("duration", result.TotalDuration),
                    new JProperty("results", new JObject(result.Entries.Select(pair =>
                        new JProperty(pair.Key, new JObject(
                            new JProperty("status", pair.Value.Status.ToString()),
                            new JProperty("tags", new JArray(pair.Value.Tags)),
                            new JProperty("description", pair.Value.Description),
                            new JProperty("duration", pair.Value.Duration),
                            new JProperty("data", new JObject(pair.Value.Data.Select(
                                p => new JProperty(p.Key, p.Value))))))))));
                context.Response.ContentType = MediaTypeNames.Application.Json;
                return context.Response.WriteAsync(
                    json.ToString(Formatting.Indented));
            }
        });
于 2020-10-07T19:53:50.917 回答