我一直在使用 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/