В ответе проверки работоспособности отсутствует расширение .json - PullRequest
0 голосов
/ 30 января 2019

Я реализовал проверку работоспособности с помощью 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) я получаю толькочастичная загрузка, которая может быть открыта, но остается пустой.

Итак, что не так с потоком non-happy в этом коде:

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);}

1 Ответ

0 голосов
/ 31 января 2019

Мой код отлично работает на моей рабочей машине.В конце концов, кажется, Internet Explorer 11 является виновником.В Chrome это просто работает ..

Обновление и решение: Благодаря Мартину Ливерсажу я нашел ответ.Используя инструменты разработчика F12 в IE, я обнаружил, что код состояния HTTP для нездоровых: 503 Сервис недоступен .Это препятствует загрузке IE результата .json.

Теперь это можно легко исправить, установив HealthCheckOptions:

app.UseHealthChecks("/health", new HealthCheckOptions()
{
    ResultStatusCodes = { [HealthStatus.Unhealthy] = 200 }, 
    ResponseWriter = WriteHealthCheckResponse
});

Используйте это, если вы интегрируете проверки работоспособности на основе содержимогофайл .json.Не когда вы смотрите только на HTTP Status.

...