0

我在做一个ASP.NET Core 3.1web 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 ui 显示的响应模式示例[ProducesResponseType(200, Type = typeof(IEnumerable<WeatherForecast>))]

在此处输入图像描述

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

在此处输入图像描述

是否可以使用Swashbuckle.AspNetCore 5.0.0. 请帮助我。

4

1 回答 1

2

经过一些分析和研究,我找到了解决方案。[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()
...

那行得通。希望这可以帮助某人。

于 2020-03-13T12:37:34.547 回答