我一直在使用WebApi进行开发,然后转到WebApi2,Microsoft在该WebApi2上引入了一个新的IHttpActionResult接口(interface),该接口(interface)似乎建议用于返回HttpResponseMessage。我对这个新界面的优势感到困惑。似乎主要是只是提供了稍微有点的简便方法来创建HttpResponseMessage

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

旧方法(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();
    }
}

最佳答案

您可能会决定不使用IHttpActionResult,因为您现有的代码会生成不适合 jar 装响应之一的HttpResponseMessage。但是,您可以使用HttpResponseMessage的 jar 头响应使IHttpActionResult适应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;
}

注意,ResponseMessage是 Controller 应继承的基类ApiController的方法。

10-04 22:17