【发布时间】:2017-09-06 08:02:16
【问题描述】:
我想通过设置状态码获得一个漂亮而简单的 API,并获得 swagger (swashbuckle) 的文档
首先,我的控制器看起来像这样:
public class ValuesController : ControllerBase
{
[SwaggerResponse(HttpStatusCode.OK, Type = typeof(List<Value>))]
[HttpGet, System.Web.Mvc.Route("api/values/")]
public async Task<List<Value>> GetValues(HttpRequestMessage request)
{
using (DatabaseContext context = new DatabaseContext())
{
return await context.Values.Take(10).ToListAsync();
}
}
}
一切正常,Swagger 以 json 格式显示结果。问题是,我无法设置状态码(例如,如果数据库错误,我可以设置为 Err 500 或 s.th.)。
Here 我读到了,为了设置状态码,我们需要返回一个HttpResponseMessage
所以我修改了我的代码:
public class ValuesController : ControllerBase
{
[SwaggerResponse(HttpStatusCode.OK, Type = typeof(HttpResponseMessage))]
[HttpGet, System.Web.Mvc.Route("api/values/")]
public async Task<HttpResponseMessage> GetValues(HttpRequestMessage request)
{
using (DatabaseContext context = new DatabaseContext())
{
var valuesToReturn = await context.Values.Take(10).ToListAsync();
return request.CreateResponse(HttpStatusCode.NotModified, valuesToReturn);
}
}
}
现在,状态码设置正确,但是swagger没有显示任何结果。
所以,我认为这可能是一个招摇的问题。
下一步是使用 Chromes Boomerang-Plugin 测试 API,但相同: Status-Code 为 304,但正文(结果/内容)为空:
关于如何使用 HttpResponseMessage 正确设置正文的任何想法?
或者,关于如何在返回值为例如时在 api 方法中设置状态代码的任何想法List<Value>?
【问题讨论】:
标签: c# asp.net-web-api http-status-codes