Интеграция конечной точки HealthCheck в интерфейс пользователя swagger (открытый API) в ядре dotnet - PullRequest
0 голосов
/ 25 января 2019

Я использую проверки работоспособности Dotnet Core, как описано здесь .Короче говоря, это выглядит так:

Сначала вы настраиваете службы следующим образом:

        services.AddHealthChecks()
            .AddSqlServer("connectionString", name: "SQlServerHealthCheck")
            ... // Add multiple other checks

Затем вы регистрируете конечную точку следующим образом:

        app.UseHealthChecks("/my/healthCheck/endpoint");

Мытакже используют Swagger (он же Open API), и мы видим все конечные точки через интерфейс Swagger, но не конечную точку проверки работоспособности.

Есть ли способ добавить это в метод контроллера, чтобы Swagger поднял конечную точкуавтоматически, или, может быть, интегрировать его с Swagger по-другому?

Лучшее решение, которое я нашел до сих пор, это добавить пользовательскую конечную точку с жестким кодом (, как описано здесь ), но это не очень хорошоподдерживать.

Ответы [ 2 ]

0 голосов
/ 30 мая 2019

Встроенной поддержки нет, либо вы вручную разрабатываете решение для бедняков, как в принятом ответе , либо разрабатываете расширение, упомянутое в этой проблеме GitHub: NetCore 2.2 - проверка работоспособности Поддержка

Swashbuckle построен поверх ApiExplorer, компонента метаданных API, который поставляется с ASP.NET Core.

Если конечные точки проверки работоспособности не обнаруживаются этим, то Swashbuckle не обнаружит их. Это фундаментальный аспект дизайна SB и вряд ли скоро изменится.

IMO, это звучит как идеальный кандидат на пакет дополнений для сообщества (см. https://github.com/domaindrivendev/Swashbuckle.AspNetCore#community-packages).

Если был добровольный участник, они могли бы начать новый проект под названием Swashbuckle.AspNetCore.HealthChecks, который предоставляет метод расширения для SwaggerGenOptions для включения функциональности - например, EnableHealthCheckDescriptions. Кроме того, это может быть реализовано в виде фильтра документов (см. Readme), который добавляет соответствующие описания операций в документ Swagger/OAI, созданный Swashbuckle.

0 голосов
/ 25 января 2019

Все еще ищу лучшее решение, но решение этой проблемы для бедного человека выглядит так:

    public const string HealthCheckEndpoint = "/my/healthCheck/endpoint";

    public void Apply(SwaggerDocument swaggerDoc, DocumentFilterContext context)
    {
        var pathItem = new PathItem();
        pathItem.Get = new Operation()
        {
            Tags = new[] { "ApiHealth" },
            Produces = new[] { "application/json" }
        };

        var properties = new Dictionary<string, Schema>();
        properties.Add("status", new Schema(){ Type = "string" });
        properties.Add("errors", new Schema(){ Type = "array" });

        var exampleObject = new { status = "Healthy", errors = new List<string>()};

        pathItem.Get.Responses = new Dictionary<string, Response>();
        pathItem.Get.Responses.Add("200", new Response() {
            Description = "OK",
            Schema = new Schema() {
                Properties = properties,
                Example = exampleObject }});

        swaggerDoc.Paths.Add(HealthCheckEndpoint, pathItem);
    }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...