在ASP中确定运行状况检查路由.. NET Core 6



我在ASP中添加了健康检查。. NET Core 6应用程序,一切正常运行。

我需要(在运行时以编程方式)确定所有健康检查路由,例如/healthz等。

我试着:

// inject IEnumerable<EndpointDataSource>
// ...
var routes = _endpointDataSources.SelectMany(source => source.Endpoints);

但是,如果不使用hack或魔法字符串,我就无法选择正确的端点(使用linq)。健康检查端点以"Heath checks"作为其显示名称,但我假设可以随时更改,因此它不可靠

我如何以可靠的方式获得这些端点,而不会在下一次更新时中断?

健康检查(目前)是通过创建中间件管道和映射结果委托来实现的,其显示名称为"Health checks"

var pipeline = endpoints.CreateApplicationBuilder()
.UseMiddleware<HealthCheckMiddleware>(args)
.Build();
return endpoints.Map(pattern, pipeline)
.WithDisplayName(DefaultDisplayName);

正如您所发现的,您应该能够发现所有端点,搜索任何运行状况检查,并通过;

列出它们的路径。
var sources = provider.GetService<IEnumerable<EndpointDataSource>>(); // via DI
var routes = sources
.SelectMany(s => s.Endpoints)
.OfType<RouteEndpoint>()
.Where(e => e.DisplayName == "Health checks")
.Select(e => e.RoutePattern)
.ToList();

所以回答你的实际问题,虽然你将用来配置端点路由的方法不太可能改变。文档中提到了如何检查端点路由元数据。但我不指望将来会得到强有力的支持。