我正在使用here所描述的Dotnet Core健康检查。简而言之,它看起来像这样:
首先,按如下方式配置服务:
services.AddHealthChecks()
.AddSqlServer("connectionString", name: "SQlServerHealthCheck")
... // Add multiple other checks
然后,按如下方式注册端点:
app.UseHealthChecks("/my/healthCheck/endpoint");
我们还使用了Swagger(也称为开放API),我们通过Swagger UI看到所有端点,但不包括运行状况检查端点。
有没有办法把它添加到控制器方法中,以便Swagger自动拾取端点,或者用另一种方式把它与Swagger集成在一起?
到目前为止,我找到的最好的解决方案是添加一个自定义硬编码端点(like described here),但是维护起来并不好。
7条答案
按热度按时间pengsaosao1#
我使用了这种方法,效果很好:https://www.codit.eu/blog/documenting-asp-net-core-health-checks-with-openapi
添加一个新的控制器,例如HealthController,并将HealthCheckService注入到构造函数中。当您在Startup中调用AddHealthChecks时,HealthCheckService将作为依赖项添加。cs:
当您重建时,健康控制器应该出现在Swagger中:
我注意到的一件事是端点仍然是“/health”(或者您在Startup.cs中设置的任何内容),而不是“/api/vxx/health”,但它仍然会正确地显示在Swagger中。
oogrdqng2#
由于Swagger已更新,.NET 2.x和3.1/Swagger 4.0.0和5.0.0之间有一个突破性的变化
下面是一个适用于5.0.0的穷人解决方案(参见eddyP 23答案)。
jrcvhitl3#
仍然在寻找更好的解决办法,但一个穷人对这个问题的解决办法看起来是这样的:
wbgh16ku4#
没有内置的支持,你要么手动开发一个poor man's solution like in the accepted answer,要么开发一个扩展,就像GitHub中提到的:NetCore 2.2 -运行状况检查支持
Swashbuckle是在
ApiExplorer
(API元数据组件)之上构建的,该组件随ASP.NET核心一起提供。如果健康检查的端点没有被暴露出来,那么它们也不会被Swashbuckle暴露出来。这是SB设计的一个基本方面,不太可能在短期内改变。
我觉得,这听起来像是一个社区附加包的完美候选者(请参见https://github.com/domaindrivendev/Swashbuckle.AspNetCore#community-packages)。
如果有愿意参与的人,他们可以开始一个名为
Swashbuckle.AspNetCore.HealthChecks
的新项目,该项目公开了SwaggerGenOptions
上的一个扩展方法,以启用该功能-例如EnableHealthCheckDescriptions
。然后,在后台,这可以实现为一个文档过滤器(请参阅自述文件),该过滤器将相关的操作描述添加到由Swashbuckle生成的Swagger/OAI
文档中。mwyxok5s5#
将运行状况检查端点集成到.NET 5上的Swagger(开放API)UI中
筛选器设置
des4xlb06#
我将poor man的解决方案升级为更具描述性的文档,它将在Swashbuckle 5中正确显示响应类型。我在Swagger UI中获得了端点,但Open API Specification中的描述很笨拙。然后我将特定的healthcheck数据类型添加到了swagger文档中。我的解决方案是使用自定义响应编写器。
假设您覆盖了响应:
假设您有以下用于运行状况检查的响应编写器:
然后,您可以实现以下IDocumentFilter:
添加到您的swaggergen选项
lhcgjxsq7#
我的解决方法是添加以下虚拟控制器。