系列介绍
【五分钟的dotnet】是一个利用您的碎片化时间来学习和丰富.net知识的博文系列。它所包含了.net体系中可能会涉及到的方方面面,比如C#的小细节,AspnetCore,微服务中的.net知识等等。
5min+不是超过5分钟的意思,"+"是知识的增加。so,它是让您花费5分钟以下的时间来提升您的知识储备量。
正文
在开发AspNet Core应用的时候,我们经常会为该应用公布一个特殊的检测接口出来。该接口的目的很简单,告诉某一些外界程序(比如docker,客户端等)这个程序现在是可以访问或者不能访问的,便于外界做出相应的操作,比如监控报警,页面通知用户稍作等待等。
在AspNet Core 2.2 之前,如果我们要实现一个这样的检测接口,需要建立一个单独的controller,比如HealthController
。然后为其实现一个简单的检测方法:
[Route("working")]
public ActionResult Working()
{
using (var connection = new SqlConnection(_connectionString))
{
try
{
connection.Open();
}
catch (SqlException)
{
return new HttpStatusCodeResult(503, "Generic error");
}
}
return new EmptyResult();
}
该接口目的是检测应用与数据库的连接能否成功。如果成功连接,则返回状态码为200
的空内容,如果失败则返回503
。 外界程序可以通过定时访问 “\working”
路径,根据返回的对应Code来做出相应的反应。
运行状况检查
但是在Aspnet Core 2.2 之后,我们有了新的解决方式。只需要简单的操作就可以进行程序运行状况的检查。
我们只需要在Startup.cs
中添加两句话就OK了:
public void ConfigureServices(IServiceCollection services)
{
//使用该扩展方法
services.AddHealthChecks();
}
public void Configure(IApplicationBuilder app)
{
app.UseRouting();
app.UseEndpoints(endpoints =>
{
//使用该扩展方法
endpoints.MapHealthChecks("/health");
});
}
默认情况是不需要在额外的引入其它nuget包的,因为AspNet Core自带了这些功能。
此时我们可以访问 "/health"
路径,将会看到对应结果:
如果程序正常,则返回Http状态码为200
,显示内容为