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, SuccessMessage,但这违背了RESTful的目的。

RESTful服务返回带有消息的HTTP响应

不返回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响应代码。

可以使用OkBadRequest方法。您可以使用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");