Earn More by Sharing What You Love
Do you create content for developers working with .NET, C#, Java, Python, or Node.js? Turn your expertise into extra income!

Tim Corey
23m 30s
using 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 项目中设置健康检查。
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 接口的类,每个类代表不同的状态:健康、退化、不健康和随机。
该类使用公共 async Task<HealthCheckResult> 实现返回 HealthCheckResult.Healthy:
return Task.FromResult(HealthCheckResult.Healthy("This is a test healthy service."));Return Task.FromResult(HealthCheckResult.Healthy("This is a test healthy service."))这将模拟健康状态,有助于测试您的前端如何处理稳定的服务。
return Task.FromResult(HealthCheckResult.Degraded("This is a test degraded service."));Return Task.FromResult(HealthCheckResult.Degraded("This is a test degraded service."))此检查将返回降级服务响应。 这是一种模拟部分故障或性能问题的简单方法。
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() 的情况。
该健康检查使用随机整数模拟三种状态之一:
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."))
};Dim randomResult As Integer = Random.Shared.Next(1, 4)
Return randomResult Select Case
Case 1
Task.FromResult(HealthCheckResult.Healthy("This is a test random service."))
Case 2
Task.FromResult(HealthCheckResult.Degraded("This is a test random service."))
Case 3
Task.FromResult(HealthCheckResult.Unhealthy("This is a test random service."))
Case Else
Task.FromResult(HealthCheckResult.Healthy("This is a test random service."))
End SelectTim 强调说,这对于在不同条件下测试行为非常有用。
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(Of RandomHealthCheck)("random", tags:=New String() {"random"}) _
.AddCheck(Of HealthyHealthCheck)("healthy", tags:=New String() {"healthy"}) _
.AddCheck(Of DegradedHealthCheck)("degraded", tags:=New String() {"degraded"}) _
.AddCheck(Of UnhealthyHealthCheck)("unhealthy", tags:=New String() {"unhealthy"})这将注册 ASP.NET Core 服务容器中依赖注入的所有健康检查。
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 With {
.Predicate = Function(x) x.Tags.Contains("healthy")
})他对 /health/degraded、/health/unhealthy 和 /health/random 重复了这一点。 每种工具都允许开发人员测试特定行为以及前端对这些行为的反应。
访问 /health/random 时,输出会根据随机结果在 "健康"、"退化 "和 "不健康 "之间变化。
Tim 通过为每个健康检查路由启用 UI 响应来增强端点。 这将提供一个 JSON 输出:
app.MapHealthChecks("/healthui", new HealthCheckOptions
{
ResponseWriter = UIResponseWriter.WriteHealthCheckUIResponse
});app.MapHealthChecks("/healthui", New HealthCheckOptions With {
.ResponseWriter = AddressOf UIResponseWriter.WriteHealthCheckUIResponse
})这样就可以通过持续时间、标签和状态等数据检查每个健康检查。 然后,Tim 为每个健康终端创建 UI 版本:
/healthui/healthy
/healthui/degraded
/healthui/不健康
/healthui/随机
每份译文都会以详细的 JSON 格式作出回应,非常适合 RESTful 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、模拟故障以及加强开发和生产环境中的网络应用变得更加容易。
Do you create content for developers working with .NET, C#, Java, Python, or Node.js? Turn your expertise into extra income!
Join our newsletter, you’ll get exclusive access on article updates. We value your privacy