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

时间:2016-09-02 20:15:12

标签: c# asp.net-mvc rest asp.net-web-api asp.net-core

如何在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,例如StatusSuccessMessage,但这会失败的目的的RESTful。

3 个答案:

答案 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)

您可以使用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;
}

答案 2 :(得分:0)

这对我有用

 return BadRequest("Something is not correct");