Swashbuckle автоматически добавляет ответ 200 OK в сгенерированный файл Swagger

Я создаю чванливые документы, используя Swashbuckle в моем проекте WebApi 2.

У меня есть следующее определение метода:

[HttpPost]
[ResponseType(typeof(Reservation))]
[Route("reservations")]
[SwaggerResponse(HttpStatusCode.Created, Type = typeof(Reservation))]
[SwaggerResponse(HttpStatusCode.BadRequest) ]
[SwaggerResponse(HttpStatusCode.Conflict)]
[SwaggerResponse(HttpStatusCode.NotFound)]
[SwaggerResponse(HttpStatusCode.InternalServerError)]        
public async Task<HttpResponseMessage> ReserveTickets([FromBody] ReserveTicketsRequest reserveTicketRequest)
{
    // ...
    return Request.CreateResponse(HttpStatusCode.Created, response);
}

Однако сгенерированный файл Swagger также содержит HTTP 200 OK, хотя он нигде не указан.

/reservations: 
  post: 
    tags: 
      - "Booking"
    operationId: "Booking_ReserveTickets"
    consumes: 
      - "application/json"
      - "text/json"
    produces: 
      - "application/json"
      - "text/json"
    parameters: 
      - 
        name: "reserveTicketRequest"
        in: "body"
        required: true
        schema: 
          $ref: "#/definitions/ReserveTicketsRequest"
    responses: 
      200: 
        description: "OK"
        schema: 
          $ref: "#/definitions/Reservation"
      201: 
        description: "Created"
        schema: 
          $ref: "#/definitions/Reservation"
      400: 
        description: "BadRequest"
      404: 
        description: "NotFound"
      409: 
        description: "Conflict"
      500: 
        description: "InternalServerError"
    deprecated: false

Есть ли способ избавиться от 200 ОК? Это сбивает с толку, поскольку это недействительный ответ.

Спасибо за предложения.


person Václav Holuša    schedule 14.06.2016    source источник


Ответы (2)


Вы можете удалить ответ по умолчанию (200 OK), украсив метод атрибутом SwaggerResponseRemoveDefaults.

person venerik    schedule 14.06.2016
comment
Есть ли способ добавить это глобально, а не украшать каждый метод в моих контроллерах? - person michaelmsm89; 25.02.2017
comment
Атрибут можно применить и к контроллеру. Чтобы добавить это поведение глобально, вы должны создать свой собственный IDocumentFilter - person venerik; 27.02.2017
comment
если кто-нибудь увидит это сейчас, SwaggerResponseRemoveDefaults больше не в библиотеке. вы должны явно добавить [ProducesStatus (204)] к любому NoContent, чтобы подавить значение по умолчанию 200, которое добавляет чванство - person vampiire; 27.03.2020

Как отмечает в своем комментарии vampiire, SwaggerResponseRemoveDefaults больше не находится в Swashbuckle. Теперь для этого нужно включить в метод как <response> XML-doc , так и атрибут [ProducesResponseType()]:

/// ...
/// <response code="201">Returns the newly reserved tickets</response>
/// <response code="400">If the input parameters are invalid</response>
/// ...
[HttpPost]
[Route("reservations")]
[ProducesResponseType(StatusCodes.Status201Created)]
[ProducesResponseType(StatusCodes.Status400BadRequest)]
...
public async Task<HttpResponseMessage> ReserveTickets([FromBody] ReserveTicketsRequest reserveTicketRequest)
{
    ...
}

Это удалит ответ по умолчанию 200. Это взято из документация Microsoft Swashbuckle по Swashbuckle 5.5.0 и ASP.NET Core 3.1

person jbb    schedule 21.07.2020