跳至页脚内容
Iron Academy Logo
C# 应用程序
C# 应用程序

其他类别

添加健康检查 - 用 C# 构建示例 API 课程

Tim Corey
23m 30s

使用 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实现返回 HealthCheckResult.Healthy:

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、模拟故障以及加强开发和生产环境中的网络应用变得更加容易。

Hero Worlddot related to 添加健康检查 - 用 C# 构建示例 API 课程
Hero Affiliate related to 添加健康检查 - 用 C# 构建示例 API 课程

分享您的所爱,赚取更多收入

您为使用 .NET、C#、Java、Python 或 Node.js 的开发人员创建内容吗?将您的专业知识转化为额外收入!

钢铁支援团队

我们每周 5 天,每天 24 小时在线。
聊天
电子邮件
打电话给我