RESTful服务返回带有消息的HTTP响应
本文关键字:HTTP 响应 消息 服务 返回 RESTful | 更新日期: 2023-09-27 18:05:30
如何在asp.net核心的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的目的。
不返回Task<MyModel>
,返回Task<IActionResult>
:
[HttpGet]
public async Task<IActionResult> Get(string id)
{
if (id == 0) return BadRequest();
// ...
return Ok(model);
}
有许多控制器辅助方法(请参阅文档),如BadRequest()
、Ok()
、NotFound()
、Created()
等。这些映射到您所期望的HTTP响应代码。
可以使用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;
}
这对我有用
return BadRequest("Something is not correct");