如何在aspnet核心上利用REST服务中的HTTP状态代码?如果出现问题,最终甚至会包含一条消息。
例如:
[HttpGet]
public async Task<MyModel> Get(int id)
{
if (id == 0)
return new HttpResponseMessage(HttpStatusCode.BadRequest);
...
}
此代码显然会返回错误Cannot implicitly convert type 'System.Net.Http.HttpResponseMessage' to 'MyModel'
一种解决方案是始终将HTTP200和一些额外的属性返回到MyModel
,例如Status
,Success
或Message
,但这会失败的目的的RESTful。
答案 0 :(得分:2)
不是返回Task<MyModel>
,而是返回Task<IActionResult>
:
[HttpGet]
public async Task<IActionResult> Get(string id)
{
if (id == 0) return BadRequest();
// ...
return Ok(model);
}
有许多控制器助手方法(请参阅documentation),例如BadRequest()
,Ok()
,NotFound()
,Created()
等。这些映射到您期望的HTTP响应代码。
答案 1 :(得分:1)
您可以使用Ok
或BadRequest
方法。您可以使用Task<ObjectResult>
作为返回类型。
[HttpGet]
public async Task<ObjectResult> Get(int id)
{
if(id==0)
return BadRequest(new {Messagae = "Something is not correctT"});
var result = await GetSomeMyModelObject();
return Ok(result);
}
您无需调用Ok
方法,只需返回数据即可。序列化器将负责设置正确的响应标头(200 OK状态)这也将起作用
[HttpGet]
public async Task<IActionResult> Get(int id)
{
if(id==0)
return BadRequest(new {Messagae = "Something is not correctT"});
var result = await GetSomeMyModelObject();
return result;
}
答案 2 :(得分:0)
这对我有用
return BadRequest("Something is not correct");