SwashBuckle не создает swagger.json, совместимый с `swagger 2.0`

Мы используем SwashBuckle 5.0 и пытаемся создать swagger doc 2.0. И, по-видимому, он создает swagger.json, который не на 100% соответствует спецификациям swagger 2.0. Проблема конкретно в том, как он включает перечисления:

name: prop-name
description: something
type: array
items:
    $ref: '#/definitions/mytype'

где это должно было быть:

name: prop-name
description: something
type: array
items:
  type: string
  enum:
    - Item1

Чтобы он был на 100% чванством 2.0. Итак, резюмируя, SwashBuckle создал для нас swagger.json, который не является стопроцентной жалобой на чванство 2.0. Мы заставляем нашу конфигурацию использовать V2, специально говоря SerializeAsV2 = true

Мы также рассматривали возможность обновления до OAS 3.0 и решили пока не делать этого, поскольку все клиенты должны быть изменены, а это требует больших усилий. Итак, мы снова пытаемся выяснить, как SwashBuckle может создать swagger.json, который на 100% является жалобой на swagger 2.0? Я просто хочу посмотреть, нет ли конфигурации, которую нам нужно изменить, прежде чем я сообщу об ошибке команде SwashBuckle.

Какие-либо предложения?


person Lost    schedule 21.05.2020    source источник
comment
вы пробовали обновиться до последней версии 5.6.0?   -  person timur    schedule 25.05.2020
comment
Я использую https://www.nuget.org/packages/Swashbuckle.AspNetCore/. Последняя официальная версия - 5.4.1. Вы говорите о автомате. Это другая библиотека.   -  person Lost    schedule 25.05.2020
comment
editor.swagger.io не пометил этот шаблон как недопустимый ...   -  person Helder Sepulveda    schedule 26.05.2020


Ответы (1)


Я начал с быстрого тестирования вашего шаблона на http://editor.swagger.io и не получил никаких ошибок ...

Вот моя попытка воспроизвести ваш код:
https://github.com/heldersepu/csharp-proj/blob/master/WebApi_NetCore/WebApi_NetCore/Controllers/ErrorController.cs#L19-L42

        [HttpPost]
        public List<MonthEnum> Enum(string id)
        {
            var l = new List<MonthEnum>();
            l.Add(MonthEnum.July);
            l.Add(MonthEnum.August);
            return l;
        }

Это дает нам:
https://raw.githubusercontent.com/heldersepu/hs-scripts/master/swagger/swagger_enum.json.

    "/api/Error": {
        "post": {
          "tags": [
            "Error"
          ],
          ...
          "responses": {
            "200": {
              "description": "Success",
              "schema": {
                "type": "array",
                "items": {
                  "$ref": "#/definitions/MonthEnum"
                }
              }
            }
          }
        }
      },
      ...
    },
    "definitions": {
      ...
      "MonthEnum": {
        "format": "int32",
        "enum": [
          0,
          1,
          ...
        ],
        "type": "integer"
      }
    }

Пользовательский интерфейс Swagger говорит, что он действителен:
http://petstore.swagger.io/?url=https://raw.githubusercontent.com/heldersepu/hs-scripts/master/swagger/swagger_enum.json

В валидаторе нет ошибок:
https://validator.swagger.io/validator/debug?url=https%3A%2F%2Fraw.githubusercontent.com%2Fheldersepu%2Fhs-scripts%2Fmaster%2Fswagger%2Fswagger_enum.json

Может быть, в вашей схеме чванства что-то не так

person Helder Sepulveda    schedule 25.05.2020