如何在 asp.net 核心网络 api 中使用 Swashbuckle 记录要在 swagger ui 中显示的包装响应

How to document a wrapped response to be displayed in swagger ui using a Swashbuckle in asp.net core web api

我正在从事 ASP.NET Core 3.1 网络 api 项目。我正在使用 Swashbuckle.AspNetCore 5.0.0 来记录我的 API。事情进展顺利。但是,由于我的 api 使用中间件来包装每个响应以确保一致性,因此我无法生成响应类型。我无法大摇大摆地生成正确的响应类型 ui。

这是一个简单的例子,

我的操作方法:

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

正如我提到的,该项目有响应中间件,它将按照以下格式包装所有响应,

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

正因为如此,我的响应值不匹配 ui。

根据 [ProducesResponseType(200, Type = typeof(IEnumerable<WeatherForecast>))]

以 swagger ui 显示的响应模式示例

但实际的包装响应看起来像,

是否可以使用 Swashbuckle.AspNetCore 5.0.0 处理这些包装的响应。请帮助我。

经过一番分析研究,找到了解决办法。使用 [ProducesResponseType] 属性非常简单。

我创建了一个名为 ResponseWrapper<T>

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

    public string Message { get; set; }

    public T Result { get; set; }
}

然后将我的action方法修饰如下,

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

这行得通。希望这对某人有所帮助。