Ошибка проверки Swagger, когда API использует enum

У меня есть следующий документ Swagger (упрощенная версия) с двумя параметрами. TypeCode (строка) и Status (перечисление). Когда я пытаюсь проверить / импортировать в Azure Api Management, я получаю следующую ошибку

Parsing error(s): JSON is valid against no schemas from 'oneOf'. Path 'paths['/Bids'].get.parameters[1]', line 1, position 188.

Документ Swagger

{
  "swagger": "2.0",
  "info": {
    "title": "/my-api",
    "description": "My API",
    "version": "1.0"
  },
  "paths": {
    "/Bids": {
      "get": {
        "tags": [
          "Bids"
        ],
        "parameters": [
          {
            "in": "query",
            "name": "typeCode",
            "type": "string"
          },
          {
            "in": "query",
            "name": "status"
          }

        ],
        "responses": {
          "200": {
            "description": "Success"
          }
        }
      }
    }   

  },
  "definitions": {
    "MyApi.ApplicationCore.Filter.Status": {
      "enum": [
        "Submitted",
        "Created",
        "Cancelled",
        "Accepted"
      ],
      "type": "string"
    }
  }
}

Я не уверен, что вызывает эту ошибку. Я подозреваю, что это связано с перечислением


person Oneil    schedule 09.02.2021    source источник


Ответы (1)


Ошибка возникает из-за того, что в параметре status отсутствует атрибут type. Поскольку вы говорите, что этот параметр должен быть перечислением, ему также нужен атрибут enum, содержащий список значений. Несмотря на то, что перечисление определено в схеме MyApi.ApplicationCore.Filter.Status, параметры запроса в OpenAPI 2.0 не могут $ref схемы, поэтому enum должен быть определен непосредственно в параметре status.

Правильная версия:

"parameters": [
  ...

  {
    "in": "query",
    "name": "status",
    "type": "string",
    "enum": [
      "Submitted",
      "Created",
      "Cancelled",
      "Accepted"
    ]
  }
],
person Helen    schedule 09.02.2021
comment
Это прекрасно работает. Публикация чванства генерировалась автоматически (netcore 3.1). Как мне получить перечисление, определенное в разделе параметров, как противопоставление определениям (как указано в решении)? - person Oneil; 10.02.2021
comment
Swashbuckle может иметь аннотации или параметры конфигурации для создания встроенных перечислений. Хотя я не знаком с Swashbuckle. Попробуйте задать новый вопрос. - person Helen; 10.02.2021