Как задокументировать завернутый ответ для отображения в пользовательском интерфейсе Swagger с помощью Swashbuckle в asp. net core web api - PullRequest
0 голосов
/ 12 марта 2020

Я работаю над ASP.NET Core 3.1 проектом веб-API. Я использую Swashbuckle.AspNetCore 5.0.0 для документирования своего API. Все работает хорошо. Однако я застрял в создании типов ответов, так как мой API использует промежуточное программное обеспечение, чтобы обернуть каждый ответ для согласованности. Я не могу сгенерировать правильный тип ответа в своем пользовательском интерфейсе.

Вот простой пример,

Мой метод действия:

[HttpGet]
[ProducesResponseType(200, Type = typeof(IEnumerable<WeatherForecast>))]
public IEnumerable<WeatherForecast> Get()
...

Как я уже упоминал, в проекте есть промежуточное ПО для ответов, которое обернет все ответы, как показано в следующем формате,

{  
    "Version": "1.0.0.0",  
    "StatusCode": 200,  
    "Message": "Request successful.",  
    "Result": [  
        "value1",  
        "value2"  
    ]  
}    

Из-за этого я получаю несоответствие значения ответа в своем пользовательском интерфейсе swagger.

Пример схемы ответа, отображаемой в пользовательском интерфейсе swagger согласно [ProducesResponseType(200, Type = typeof(IEnumerable<WeatherForecast>))]

enter image description here

Но фактический упакованный ответ выглядит как

enter image description here

Можно ли обработать этот завернутый ответ, используя Swashbuckle.AspNetCore 5.0.0. Пожалуйста, помогите мне.

1 Ответ

0 голосов
/ 13 марта 2020

После некоторого анализа и исследований я нашел решение. Использовать атрибут [ProducesResponseType] довольно просто.

Я создал отдельное class с именем ResponseWrapper<T>,

public class ResponseWrapper<T>
{
    public int StatusCode { get; set; }

    public string Message { get; set; }

    public T Result { get; set; }
}

, а затем украсил свой метод действия следующим образом:

[HttpGet]
[ProducesResponseType(200, Type = typeof(ResponseWrapper<IEnumerable<WeatherForecast>>))]
public IEnumerable<WeatherForecast> Get()
...

И это работает. Надеюсь, это кому-нибудь поможет.

...