一尘不染

为什么要使用IHttpActionResult而不是HttpResponseMessage?

c#

我一直在使用WebApi进行开发,然后转到了WebApi2,Microsoft在该处引入了一个新的IHttpActionResult接口,该接口似乎建议用于返回a的接口HttpResponseMessage。我对这个新界面的优势感到困惑。它似乎主要只是提供了一种
稍微 容易些的创建方式HttpResponseMessage

我会说这是“抽象的抽象”。我想念什么吗?除了节省一行代码之外,使用此新接口还能给我带来什么现实世界的好处?

旧方法 (WebApi):

public HttpResponseMessage Delete(int id)
{
    var status = _Repository.DeleteCustomer(id);
    if (status)
    {
        return new HttpResponseMessage(HttpStatusCode.OK);
    }
    else
    {
        throw new HttpResponseException(HttpStatusCode.NotFound);
    }
}

新方法 (WebApi2):

public IHttpActionResult Delete(int id)
{
    var status = _Repository.DeleteCustomer(id);
    if (status)
    {
        //return new HttpResponseMessage(HttpStatusCode.OK);
        return Ok();
    }
    else
    {
        //throw new HttpResponseException(HttpStatusCode.NotFound);
        return NotFound();
    }
}

阅读 288

收藏
2020-05-19

共1个答案

一尘不染

您可能会决定不使用它,IHttpActionResult因为您现有的代码所生成的a
HttpResponseMessage不适合罐装响应之一。但是,您可以适应HttpResponseMessageIHttpActionResult使用的罐头回应ResponseMessage。我花了一些时间才弄清楚这一点,因此我想将其发布,以表明您不必选择其中一个:

public IHttpActionResult SomeAction()
{
   IHttpActionResult response;
   //we want a 303 with the ability to set location
   HttpResponseMessage responseMsg = new HttpResponseMessage(HttpStatusCode.RedirectMethod);
   responseMsg.Headers.Location = new Uri("http://customLocation.blah");
   response = ResponseMessage(responseMsg);
   return response;
}

注意,ResponseMessageApiController您的控制器应继承的基类的方法。

2020-05-19