我一直在使用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
的方法。