c# - 为什么我应该使用 IHttpActionResult 而不是 HttpResponseMessage?

标签 c# asp.net-web-api httpresponse

我一直在使用 WebApi 进行开发,然后转向 WebApi2,其中 Microsoft 引入了一个新的 IHttpActionResult 接口(interface),该接口(interface)似乎被推荐用于返回 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();
    }
}

最佳答案

您可能决定不使用 IHttpActionResult,因为您现有的代码构建的 HttpResponseMessage 不适合其中一个预设响应。但是,您可以使用 ResponseMessage 的固定响应将 HttpResponseMessage 改编为 IHttpActionResult。我花了一段时间才弄清楚这一点,所以我想发布它来表明您不必选择其中之一:

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 是基类 ApiController 的一个方法,您的 Controller 应从该基类继承。

关于c# - 为什么我应该使用 IHttpActionResult 而不是 HttpResponseMessage?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21758615/

相关文章:

c# - Windows 窗体 : Obtain window size to fit a picture box containing an image

asp.net-mvc - Web API ajax 调用中参数为 null

c# - WebAPI 返回文件和下载未开始

asp.net - Response.Write 和 UpdatePanel

c# - 在 ASP.NET MVC2 中将 http 204 "no content"返回给客户端

c# - 发布站点上的加密类

C#简单的数学函数

c# - 无法使用 Visual Studio 2012 RTM 在 Silverlight 5 项目中添加 XAML 断点

entity-framework - 为什么 ASP.NET SPA 模板为所有请求实例化 UserManager 一次?

c# - 在.NET 中是否有一类用于设置HttpResponse.StatusDescription 的常量?