我四处查看,但我假设这是一种较旧的做事方式,但是将运行状况检查端点添加到中间件是否有更深层的区别?
In Startup.Configure()..
app.UseEndpoints(endpoints =>
{
endpoints.MapHealthChecks("/health");
});
app.UseHealthChecks("/health")
UseHealthChecks
和MapHealthChecks
有细微的差别,UseHealthChecks
允许您在使用null或空PathString时捕获端口上的任何端点,MapHealthChecks
不允许这样做,使用null会抛出异常,空字符串是相当于/
。
它们都在幕后使用相同的中间件
HealthCheckMiddleware
。 MapHealthChecks
是 IEndpointRouteBuilder
上的扩展方法,而 UseHealthChecks
是 IApplicationBuilder
上的扩展方法。
这里附上源码供参考。
https://github.com/dotnet/aspnetcore/tree/main/src/Middleware/HealthChecks/src/Builder
如果您查看源代码,您会发现
UseHealthChecks
使用 MapWhen()
,其中 MapHealthChecks
使用 Map()
复制自文档:
有两种方法可以让调用者进行健康检查:
与
MapHealthChecks
相比,使用UseHealthChecks
的优点是能够使用端点感知中间件(例如授权),并对匹配策略进行更细粒度的控制。与 UseHealthChecks
相比,使用 MapHealthChecks
的主要优点是准确控制运行状况检查在中间件管道中运行的位置。
null
或空 PathString
的任何路径。允许对向指定端口发出的任何请求执行运行状况检查。app.MapHealthChecks("/healthz").ShortCircuit();
。有关更多信息,请参阅路由后的短路中间件。