IRONSOFTWAREHOME

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

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

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 项目中设置健康检查。

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

return Task.FromResult(HealthCheckResult.Healthy("This is a test healthy service."));

这将模拟健康状态,有助于测试您的前端如何处理稳定的服务。

DegradedHealthCheck.cs

return Task.FromResult(HealthCheckResult.Degraded("This is a test degraded service."));

此检查将返回降级服务响应。 这是一种模拟部分故障或性能问题的简单方法。

UnhealthyHealthCheck.cs

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."))
};

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" });

这将注册 ASP.NET Core 服务容器中依赖注入的所有健康检查。

MapAllHealthChecks()

app.MapHealthChecks("/health");

这将创建一个单一的端点/健康状况,对所有服务进行综合评估。 如果任何一项不健康,则整个检查将返回不健康。

创建特定的健康端点

为了测试各个组件,Tim 通过标签映射每个健康检查:

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
});

这样就可以通过持续时间、标签和状态等数据检查每个健康检查。 然后,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、模拟故障以及加强开发和生产环境中的网络应用变得更加容易。

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!

Let's Stay in Touch!

Join our newsletter, you’ll get exclusive access on article updates. We value your privacy

Key in blue circle

立即获取免费的 30 天试用版密钥

Your trial license will be sent to your email address

无任何限制。100% 解锁。无需信用卡。

bullet_checked无需信用卡或创建账户无任何限制。100% 解锁。无需信用卡。
  • Logo Aetna
  • Logo NASA
  • Logo GE
  • Logo Porsche
  • Logo USDA
  • Logo Qatar
Join Millions of Engineers who’ve tried IronPDF
获取您的无义务咨询
填写下面的表格或通过sales@ironsoftware.com
您的资料将始终保密。
深受全球数百万工程师信赖
Iron Software 的客户徽标
立即获取您的免费30 天试用密钥
无需信用卡或创建账户