添加健康检查 - 用 C# 构建示例 API 课程
使用 ASP.NET Core 在 C# 中开发和测试 RESTful API 是任何现代后端开发人员的实用技能。 在"添加健康检查 - 在 C# 中构建示例 API 课程"的教程视频中,Tim Corey 通过构建具有集成健康检查功能的示例 API 进行了讲解。 这篇文章完全基于 Tim 的笔录,一步一步地解释了整个过程,涵盖了一些关键点,如 public async Task、int id、var app 和其他 HTTP 请求方法的使用。
让我们深入了解一下 Tim Corey 如何使用 Visual Studio Code 在 C# API 项目中设置健康检查。
示例 API 和健康检查简介
Tim 解释说,在学习网络开发时,示例 API 是一个强大的工具。 它允许开发人员使用 GET、POST、PUT 和 DELETE 方法以及适当的请求数据和状态代码来模拟 API 调用。 Tim 构建的 API 支持
带有数据模型的样本数据
API 请求的 RESTful 行为
JSON 格式的回复
健康检查
- 作为 Docker 容器和网络应用程序部署
安装健康检查软件包
Tim 在 Visual Studio Code 中打开项目,右键单击 "依赖关系 "管理 NuGet 软件包。 他搜索并安装了 AspNetCore.HealthChecks.UI.Client 软件包。 这使得应用程序能够支持两种类型的健康检查。
创建健康检查类
Tim 在 API 项目文件夹中添加了一个名为 HealthChecks 的新文件夹。 在这里,他创建了多个实现 IHealthCheck 接口的类,每个类代表不同的状态:健康、退化、不健康和随机。
HealthyHealthCheck.cs(健康检查)
该类使用公共 async Task
return Task.FromResult(HealthCheckResult.Healthy("This is a test healthy service."));return Task.FromResult(HealthCheckResult.Healthy("This is a test healthy service."));这将模拟健康状态,有助于测试您的前端如何处理稳定的服务。
DegradedHealthCheck.cs
return Task.FromResult(HealthCheckResult.Degraded("This is a test degraded service."));return Task.FromResult(HealthCheckResult.Degraded("This is a test degraded service."));此检查将返回降级服务响应。 这是一种模拟部分故障或性能问题的简单方法。
UnhealthyHealthCheck.cs
return Task.FromResult(HealthCheckResult.Unhealthy("This is a test unhealthy service."));return Task.FromResult(HealthCheckResult.Unhealthy("This is a test unhealthy service."));这模拟了服务失败的情况,模拟了您期望出现 500 HTTP 状态代码或返回 NotFound() 的情况。
RandomHealthCheck.cs(随机健康检查)
该健康检查使用随机整数模拟三种状态之一:
int randomResult = Random.Shared.Next(1, 4);
return randomResult switch
{
1 => Task.FromResult(HealthCheckResult.Healthy("This is a test random service.")),
2 => Task.FromResult(HealthCheckResult.Degraded("This is a test random service.")),
3 => Task.FromResult(HealthCheckResult.Unhealthy("This is a test random service.")),
_ => Task.FromResult(HealthCheckResult.Healthy("This is a test random service."))
};int randomResult = Random.Shared.Next(1, 4);
return randomResult switch
{
1 => Task.FromResult(HealthCheckResult.Healthy("This is a test random service.")),
2 => Task.FromResult(HealthCheckResult.Degraded("This is a test random service.")),
3 => Task.FromResult(HealthCheckResult.Unhealthy("This is a test random service.")),
_ => Task.FromResult(HealthCheckResult.Healthy("This is a test random service."))
};Tim 强调说,这对于在不同条件下测试行为非常有用。
在启动配置中注册健康检查
Tim 在启动或配置文件夹中添加了一个新的静态类 HealthChecksConfig.cs。 该类包括两个静态方法:
添加所有健康检查()
services.AddHealthChecks()
.AddCheck<RandomHealthCheck>("random", tags: new[] { "random" })
.AddCheck<HealthyHealthCheck>("healthy", tags: new[] { "healthy" })
.AddCheck<DegradedHealthCheck>("degraded", tags: new[] { "degraded" })
.AddCheck<UnhealthyHealthCheck>("unhealthy", tags: new[] { "unhealthy" });services.AddHealthChecks()
.AddCheck<RandomHealthCheck>("random", tags: new[] { "random" })
.AddCheck<HealthyHealthCheck>("healthy", tags: new[] { "healthy" })
.AddCheck<DegradedHealthCheck>("degraded", tags: new[] { "degraded" })
.AddCheck<UnhealthyHealthCheck>("unhealthy", tags: new[] { "unhealthy" });这将注册 ASP.NET Core 服务容器中依赖注入的所有健康检查。
MapAllHealthChecks()
app.MapHealthChecks("/health");app.MapHealthChecks("/health");这将创建一个单一的端点/健康状况,对所有服务进行综合评估。 如果任何一项不健康,则整个检查将返回不健康。
创建特定的健康端点
为了测试各个组件,Tim 通过标签映射每个健康检查:
app.MapHealthChecks("/health/healthy", new HealthCheckOptions {
Predicate = x => x.Tags.Contains("healthy")
});app.MapHealthChecks("/health/healthy", new HealthCheckOptions {
Predicate = x => x.Tags.Contains("healthy")
});他对 /health/degraded、/health/unhealthy 和 /health/random 重复了这一点。 每种工具都允许开发人员测试特定行为以及前端对这些行为的反应。
访问 /health/random 时,输出会根据随机结果在 "健康"、"退化 "和 "不健康 "之间变化。
为健康检查添加 UI 支持
Tim 通过为每个健康检查路由启用 UI 响应来增强端点。 这将提供一个 JSON 输出:
app.MapHealthChecks("/healthui", new HealthCheckOptions
{
ResponseWriter = UIResponseWriter.WriteHealthCheckUIResponse
});app.MapHealthChecks("/healthui", new HealthCheckOptions
{
ResponseWriter = UIResponseWriter.WriteHealthCheckUIResponse
});这样就可以通过持续时间、标签和状态等数据检查每个健康检查。 然后,Tim 为每个健康终端创建 UI 版本:
/healthui/healthy
/healthui/degraded
/healthui/不健康
- /healthui/随机
每份译文都会以详细的 JSON 格式作出回应,非常适合 RESTful API 以及从移动设备或网页进行测试。
包装 API 项目
Tim 强调说,即使有了这些功能,Program.cs 仍然只有 21 行。 他认为这是由于
良好的项目文件夹结构
将模型保存在 Models 文件夹中
将端点和控制器放在各自的文件夹中
- 为每个健康检查类使用异步任务方法
他还强调了该示例 API 在生产环境中的作用,即在部署前模拟延迟或故障。
Tim总结道:"除了对 API 进行GET调用外,我们还可以对其进行更多的测试。
下一步是什么
Tim 预览了下一课,他将在下一课中添加模拟减速(如 5 秒延迟)和错误(如 return NotFound() 或 return BadRequest()),以进一步测试 API 行为。
结论
在本视频教程中,Tim Corey 有条不紊地使用 ASP.NET Core 构建了一个具有集成健康检查功能的最小 API。 主要内容包括
健康检查类(健康、退化、不健康、随机)
通过 AddHealthChecks() 进行依赖注入
使用 MapHealthChecks() 映射端点
- 支持结构化 JSON 响应
这种方法使验证 REST API、模拟故障以及加强开发和生产环境中的网络应用变得更加容易。

