Проверка работоспособности ASP.NET EF Core ничего не возвращает, кроме состояния 200
В настоящее время я выполняю проверку работоспособности своего проекта Identity ASP.NET Core 3.1 с использованием PostgreSQL и EntifyFramework Core в контейнере Docker.
Это пакеты nuget, установленные в моем проекте
- Microsoft.EntityFrameworkCore 3.1.3
- Npgsql.EntityFrameworkCore.PostgreSQL 3.1.3
- Microsoft.Extensions.Diagnostics.HealthChecks.EntityFrameworkCore3.1.3
- Microsoft.AspNetCore.Identity.EntityFrameworkCore 3.1.3
Вот мой класс Startup.cs
public void ConfigureServices(IServiceCollection services)
{
services.AddDbContext<IdentityContext>(options => options.UseNpgsql(Configuration["Identity:ConnectionString"]));
services.AddHealthChecks()
.AddDbContextCheck<IdentityContext>("Database");
services.AddControllers();
}
public void Configure(IApplicationBuilder app, IWebHostEnvironment env)
{
app.UseHealthChecks("/health");
app.UseHttpsRedirection();
app.UseRouting();
app.UseAuthentication();
app.UseAuthorization();
app.UseEndpoints(endpoints =>
{
endpoints.MapControllers();
});
}
Все работает нормально, я получаю ответ Healthy с кодом состояния 200, обращаясь к конечной точке /health, пока я намеренно не остановлю контейнер PostgreSQL в моем докере.
Я ожидаю получить код состояния 503 с ответом "Неработоспособный" от /health, но вместо этого получил пустой ответ с кодом состояния 200
1 ответ
Я думаю, что ваша проверка "База данных" не вызывается, когда вы запрашиваете URL "/ здоровье". Попробуйте зарегистрировать HealthCheck с помощью тега. Затем определите enpoint с этим тегом.
public void ConfigureServices(IServiceCollection services)
{
services.AddDbContext<IdentityContext>(options => options.UseNpgsql(Configuration["Identity:ConnectionString"]));
services.AddHealthChecks()
.AddDbContextCheck<IdentityContext>("Database",tags: new[] { "live" });
services.AddControllers();
}
public void Configure(IApplicationBuilder app, IWebHostEnvironment env)
{
app.UseHttpsRedirection();
app.UseRouting();
app.UseAuthentication();
app.UseAuthorization();
app.UseEndpoints(endpoints =>
{
endpoints.MapControllers();
endpoints.MapHealthChecks("/health/live", new HealthCheckOptions()
{
Predicate = (check) => check.Tags.Contains("live")
});
});
}
Вы можете прочитать о проверке здоровья здесь