我有一个ASP.NET Core Web API站点,启用了Swagger生成和UI。为了使Swagger工作(至少自动工作),必须输入控制器方法的返回值。例如,
public async Task<Employee> LoadEmployee(string id)
但是,我需要从此操作返回自定义HTTP状态代码和内容。我见过的所有示例都使用StatusCode方法,或返回其他一些对象。这个问题就是Swagger不知道动作的返回类型是什么,因此无法生成API规范。
在保留签名的同时,是否有某种方法(异常,控制器上的方法等)返回自定义代码/内容?我已经看过使用自定义中间件的解决方案,但它似乎是一个常见的场景,应该有一些东西构建它。
答案 0 :(得分:4)
您可以使用StatusCodeResult StatusCode(...)
返回状态代码和消息/对象。
public async Task<ObjectResult> LoadEmployee(string id)
{
var employee = await repository.GetById(id);
if(employee == null) {
return NotFound();
}
return StatusCode((int)HttpStatusCode.Ok, employee);
}
答案 1 :(得分:3)
参考:
ASP.NET Core APIs in the fast lane with Swagger and Autorest
Adding swagger in ASP.NET Core Web API
ASP.NET Core 1.0 MVC API documentation using Swashbuckle Swagger
对于输出定义,只需添加 描述类型的
[Produces]
和[SwaggerResponse]
属性 像这样回来了:
[HttpGet]
[Produces(typeof(Employee))]
[SwaggerResponse(System.Net.HttpStatusCode.OK, Type = typeof(Employee))]
public async Task<IActionResult> LoadEmployee(string id) {
var employee = await repository.GetById(id);
if(employee == null) {
return NotFound();
}
return Ok(employee);
}
答案 2 :(得分:1)
ProducesResponseType
属性,它是MVC Web API Core属性,而不是Swagger。与SwaggerResponse
相同。