0

0

C# 健康检查实现方法 C# ASP.NET Core如何添加健康检查

煙雲

煙雲

发布时间:2026-02-12 12:35:33

|

551人浏览过

|

来源于php中文网

原创

asp.net core健康检查需通过addhealthchecks()获取ihealthchecksbuilder注册检查项,自定义类须实现ihealthcheck接口;http端点用maphealthchecks暴露,默认json精简响应,可自定义responsewriter输出详情;数据库检查默认不真连,需指定healthquery或启用ef检测;并发执行各检查项并聚合状态,中间件顺序须在userouting后、useendpoints前。

c# 健康检查实现方法 c# asp.net core如何添加健康检查

HealthCheckService 和 IHealthChecksBuilder 怎么用

ASP.NET Core 的健康检查不是靠手动轮询或写个 GET /health 就完事的,它依赖内置的 HealthCheckService 后台服务和 IHealthChecksBuilder 注册机制。你得先在 Program.cs 里调用 AddHealthChecks(),它返回的就是 IHealthChecksBuilder 实例,所有检查项都通过它添加。

常见错误是直接 new 一个自定义类然后塞进 DI 容器,结果健康端点返回始终是 Healthy 或直接 500——因为没走健康检查管道,HealthCheckService 根本不知道它存在。

  • 必须用 services.AddHealthChecks().AddCheck<MyDbHealthCheck>("db"),不能只注册 MyDbHealthCheck 类型
  • 自定义检查类必须实现 IHealthCheck 接口,且 CheckHealthAsync 方法不能抛未捕获异常(会转成 Unhealthy,但堆栈不返回给客户端)
  • 如果检查逻辑含异步 IO(如数据库连接测试),必须用 await,别用 .Result.Wait(),否则可能死锁

如何添加 HTTP 端点并控制响应格式

注册完检查项后,还得暴露一个可访问的 endpoint,靠的是 MapHealthChecks 扩展方法。它默认返回 JSON,但字段精简(只有 statusresults),不包含耗时、异常详情等调试信息。

开发阶段常需要看到每个检查项的执行时间或失败原因,这时得启用 ResponseWriter 自定义输出逻辑,而不是改用第三方中间件拦截响应体。

  • app.MapHealthChecks("/health", new HealthCheckOptions { ResponseWriter = WriteDetailedHealthResponse })
  • WriteDetailedHealthResponse 是个委托,接收 HttpContextHealthReport,可序列化 report.Entries 中每个 HealthReportEntryExceptionDuration 属性
  • 生产环境禁用详细输出,避免泄露内部信息;可用 Environment.IsDevelopment() 控制开关

数据库连接健康检查为什么总是 Healthy 即使连不上

AddSqlServerAddNpgsql 等扩展方法时,默认只检查连接字符串能否解析,不真连数据库。这是为了性能——健康检查端点不该成为 DB 连接风暴源头。

CodeWP
CodeWP

针对 WordPress 训练的AI代码生成器

下载

真正验证连通性,得传入 configureOptions 参数,开启 includeEntityFramework 或显式调用 Open() + Close()

  • SQL Server:.AddSqlServer(connectionString, healthQuery: "SELECT 1", name: "sql") —— healthQuery 是关键,不设就只是解析连接字符串
  • EF Core 场景下,若用了 AddDbContextHealthCheck<AppDbContext>,它默认会调用 context.Database.CanConnectAsync(),但前提是上下文已正确注册且无作用域问题
  • 注意连接超时:健康检查默认超时 30 秒,可通过 timeout 参数缩短,比如 timeout: TimeSpan.FromSeconds(5)

多个健康检查并发执行时状态怎么聚合

默认策略是「任意一项 Unhealthy → 整体 Unhealthy」,由 HealthReport.Status 的计算逻辑决定。这个聚合行为不可配置,但你可以用 RequireHealthyRequireHealthyExcept 分组控制依赖关系。

比如缓存服务挂了不影响主流程,但数据库挂了必须告警,这时就得拆成两个 endpoint,而不是塞进同一个检查组。

  • AddCheck 注册的每一项独立执行,彼此不阻塞;HealthCheckService 并发运行它们(非顺序)
  • 想让某些检查仅在其他检查 Healthy 时才运行?不行——框架不支持条件触发,需在 CheckHealthAsync 内部手动判断并返回 HealthCheckResult.Degraded() 或跳过逻辑
  • 聚合结果中的 HealthReport.TotalDuration 是所有检查最大耗时,不是总和;单个检查若超时,会被取消并标记为 Unhealthy

最易忽略的一点:健康检查中间件在请求管道的位置。它必须放在 UseRouting 之后、UseEndpoints 之前,否则 MapHealthChecks 不生效。顺序错,/health 就 404。

热门AI工具

更多
DeepSeek
DeepSeek

幻方量化公司旗下的开源大模型平台

豆包大模型
豆包大模型

字节跳动自主研发的一系列大型语言模型

通义千问
通义千问

阿里巴巴推出的全能AI助手

腾讯元宝
腾讯元宝

腾讯混元平台推出的AI助手

文心一言
文心一言

文心一言是百度开发的AI聊天机器人,通过对话可以生成各种形式的内容。

讯飞写作
讯飞写作

基于讯飞星火大模型的AI写作工具,可以快速生成新闻稿件、品宣文案、工作总结、心得体会等各种文文稿

即梦AI
即梦AI

一站式AI创作平台,免费AI图片和视频生成。

ChatGPT
ChatGPT

最最强大的AI聊天机器人程序,ChatGPT不单是聊天机器人,还能进行撰写邮件、视频脚本、文案、翻译、代码等任务。

相关专题

更多
数据分析工具有哪些
数据分析工具有哪些

数据分析工具有Excel、SQL、Python、R、Tableau、Power BI、SAS、SPSS和MATLAB等。详细介绍:1、Excel,具有强大的计算和数据处理功能;2、SQL,可以进行数据查询、过滤、排序、聚合等操作;3、Python,拥有丰富的数据分析库;4、R,拥有丰富的统计分析库和图形库;5、Tableau,提供了直观易用的用户界面等等。

900

2023.10.12

SQL中distinct的用法
SQL中distinct的用法

SQL中distinct的语法是“SELECT DISTINCT column1, column2,...,FROM table_name;”。本专题为大家提供相关的文章、下载、课程内容,供大家免费下载体验。

333

2023.10.27

SQL中months_between使用方法
SQL中months_between使用方法

在SQL中,MONTHS_BETWEEN 是一个常见的函数,用于计算两个日期之间的月份差。想了解更多SQL的相关内容,可以阅读本专题下面的文章。

372

2024.02.23

SQL出现5120错误解决方法
SQL出现5120错误解决方法

SQL Server错误5120是由于没有足够的权限来访问或操作指定的数据库或文件引起的。想了解更多sql错误的相关内容,可以阅读本专题下面的文章。

1572

2024.03.06

sql procedure语法错误解决方法
sql procedure语法错误解决方法

sql procedure语法错误解决办法:1、仔细检查错误消息;2、检查语法规则;3、检查括号和引号;4、检查变量和参数;5、检查关键字和函数;6、逐步调试;7、参考文档和示例。想了解更多语法错误的相关内容,可以阅读本专题下面的文章。

368

2024.03.06

oracle数据库运行sql方法
oracle数据库运行sql方法

运行sql步骤包括:打开sql plus工具并连接到数据库。在提示符下输入sql语句。按enter键运行该语句。查看结果,错误消息或退出sql plus。想了解更多oracle数据库的相关内容,可以阅读本专题下面的文章。

1128

2024.04.07

sql中where的含义
sql中where的含义

sql中where子句用于从表中过滤数据,它基于指定条件选择特定的行。想了解更多where的相关内容,可以阅读本专题下面的文章。

583

2024.04.29

sql中删除表的语句是什么
sql中删除表的语句是什么

sql中用于删除表的语句是drop table。语法为drop table table_name;该语句将永久删除指定表的表和数据。想了解更多sql的相关内容,可以阅读本专题下面的文章。

433

2024.04.29

2026春节习俗大全
2026春节习俗大全

本专题整合了2026春节习俗大全,阅读专题下面的文章了解更多详细内容。

189

2026.02.11

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
C# 教程
C# 教程

共94课时 | 9.2万人学习

C 教程
C 教程

共75课时 | 4.7万人学习

C++教程
C++教程

共115课时 | 17.2万人学习

关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号