如何在 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()
...
这行得通。希望这对某人有所帮助。
我正在从事 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>))]
但实际的包装响应看起来像,
是否可以使用 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()
...
这行得通。希望这对某人有所帮助。