在ASP.NET Core应用开发中,健康检查是监控服务运行状态、保障系统可用性的核心功能,通过内置的HealthCheck组件可以快速实现服务健康状态的检测与上报。

基础健康检查配置
首先需要在项目中进行基础配置,打开Program.cs文件,添加健康检查相关服务与中间件:
var builder = WebApplication.CreateBuilder(args);
// 添加健康检查服务
builder.Services.AddHealthChecks();
var app = builder.Build();
// 映射健康检查端点
app.MapHealthChecks("/health");
app.Run();
启动应用后访问/health路径,默认会返回状态码200和Healthy文本,表示服务当前处于健康状态。
自定义健康检查逻辑
内置的基础检查只能确认应用是否启动,实际场景中往往需要检测数据库连接、第三方服务可用性等自定义逻辑,此时需要实现IHealthCheck接口。
实现自定义检查类
以下示例实现了一个检测本地文件是否存在的自定义健康检查:
using Microsoft.Extensions.Diagnostics.HealthChecks;
public class FileExistHealthCheck : IHealthCheck
{
private readonly string _filePath;
public FileExistHealthCheck(string filePath)
{
_filePath = filePath;
}
public Task<HealthCheckResult> CheckHealthAsync(HealthCheckContext context, CancellationToken cancellationToken = default)
{
// 检查指定路径的文件是否存在
if (File.Exists(_filePath))
{
return Task.FromResult(HealthCheckResult.Healthy("目标文件存在"));
}
return Task.FromResult(HealthCheckResult.Unhealthy("目标文件不存在"));
}
}
注册自定义检查
将自定义检查类注册到服务中,并指定检查名称:
builder.Services.AddHealthChecks()
.AddCheck<FileExistHealthCheck>("file-exist-check", tags: new[] { "file" })
.AddCheck("database-check", () =>
{
// 模拟数据库连接检查逻辑
bool isDbConnected = true; // 实际场景中替换为真实的数据库连接检测代码
if (isDbConnected)
{
return HealthCheckResult.Healthy("数据库连接正常");
}
return HealthCheckResult.Unhealthy("数据库连接失败");
}, tags: new[] { "database" });
健康检查端点配置
默认的健康检查端点返回内容比较简单,实际使用中往往需要返回更详细的信息,比如检查项名称、状态、描述等,可以通过配置HealthCheckOptions实现。
app.MapHealthChecks("/health", new Microsoft.AspNetCore.Diagnostics.HealthChecks.HealthCheckOptions
{
ResponseWriter = async (context, report) =>
{
context.Response.ContentType = "application/json";
var response = new
{
status = report.Status.ToString(),
checks = report.Entries.Select(entry => new
{
name = entry.Key,
status = entry.Value.Status.ToString(),
description = entry.Value.Description
}),
total_duration = report.TotalDuration.TotalMilliseconds
};
await context.Response.WriteAsJsonAsync(response);
}
});
此时访问/health会返回JSON格式的检查结果,方便监控系统解析处理。
按标签过滤检查项
如果只需要检查特定类型的检查项,可以在端点配置中指定标签过滤:
// 只返回标签为database的检查项结果
app.MapHealthChecks("/health/database", new Microsoft.AspNetCore.Diagnostics.HealthChecks.HealthCheckOptions
{
Predicate = check => check.Tags.Contains("database")
});
常见使用场景
- 容器编排场景:Kubernetes等容器平台会通过健康检查端点判断容器是否需要重启,将
/health配置为存活探针即可 - 负载均衡场景:负载均衡器可以通过健康检查端点判断后端服务是否可用,自动剔除不健康的实例
- 监控告警场景:监控系统定时请求健康检查端点,当返回状态为
Unhealthy时触发告警通知运维人员
通过以上步骤,就可以在C# ASP.NET Core项目中完整实现自定义的健康检查功能,满足不同场景下的服务状态监控需求。
C#ASP.NET_CoreHealthCheck健康检查修改时间:2026-07-03 09:57:20