2016-11-23 78 views
1

我有一个ASP.NET Core Web API网站,启用了Swagger生成和UI。为了让Swagger工作(至少自动工作),必须键入来自控制器方法的返回值。例如,如何在不返回对象,IActionResult等的情况下返回ASP.NET Core中的自定义HTTP状态/消息?

public async Task<Employee> LoadEmployee(string id) 

但是,我需要返回此操作的自定义HTTP状态代码和内容。我见过的所有例子都使用了StatusCode方法,或者返回一些其他对象。这个问题是Swagger不知道该动作的返回类型是什么,所以不能生成API规范。

是否有某种方式(例外,控制器等方法)返回自定义代码/内容,同时保持签名?我已经看到了使用定制中间件的解决方案,但它似乎是一种常见的情况,应该有一些内置的东西。

回答

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); 
} 
+0

谢谢。我希望避免使用特定的代码(与API主要是自我记录相对),但这是有效的。 –

0

ProducesResponseType属性由扬鞭支持,是一个MVC的Web API的核心属性,不招摇。与SwaggerResponse相同。

0

您可以使用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); 
} 
相关问题