Добавление расширения x-logo vendor с использованием Swashbuckle Asp.Net Core для ReDoc - PullRequest
0 голосов
/ 23 января 2019

Я использую файл swagger.json (сгенерированный Swashbuckle) для ReDoc для отображения документации API.

Что мне нужно: Добавьте расширение x-logo вендора к swagger json, сгенерированному с помощью Swashbuckle (Swashbuckle.AspNetCore.SwaggerGen библиотека), чтобы пользовательский интерфейс ReDoc отображал логотип в верхнем левом углу , как это enter image description here

Проблема: Мне удалось добавить x-log в файл swagger.json, но он был добавлен в неправильный раздел файла. Он должен быть внутри info секции.

Это то, что я сделал, чтобы добавить x-logo

  • Создан фильтр документов, как показано ниже
    public class XLogoDocumentFilter : IDocumentFilter
        {
            public void Apply(SwaggerDocument swaggerDoc, DocumentFilterContext context)
            {
              swaggerDoc.Extensions["x-logo"] = new { url = "https://URL/of/the/logo", altText = "Company Logo" };
            }

        }
  • Добавлен фильтр к SwaggerDoc как
services.AddSwaggerGen(options => 
{   
  options.DocumentFilter<XLogoDocumentFilter>();

});

Фактический

    {
      "swagger": "2.0",
      "info": {
        "version": "v1",
        "title":"Sample REST API"
      },
      "x-logo": {
        "url": "https://rebilly.github.io/ReDoc/petstore-logo.png",
        "altText": "Aimia Logo"
      }
    }

Ожидаемое

    {
      "swagger": "2.0",
      "info": {
        "version": "v1",
        "title":"Sample REST API",
        "x-logo": {
          "url": "https://rebilly.github.io/ReDoc/petstore-logo.png",
          "altText": "Aimia Logo"
        }
      },

    }

Действительно благодарны за любую помощь или предложения, чтобы иметь x-logo в правильном разделе файла swagger.json.

1 Ответ

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

После ввода вопроса я сам нашел решение.Вместо добавления расширения непосредственно в swaggerDoc, добавьте его в объект swaggerDoc.Info.

public class XLogoDocumentFilter : IDocumentFilter
        {
            public void Apply(SwaggerDocument swaggerDoc, DocumentFilterContext context)
            {   
              // need to check if extension already exists, otherwise swagger 
              // tries to re-add it and results in error  
              if (!swaggerDoc.Info.Extensions.ContainsKey("x-logo"))
              {
                 swaggerDoc.Info.Extensions.Add("x-logo", new {
                    url = "https://URL/To/The/Logo",
                    altText = "Logo",
                });
              }           

            }

        }
...