我一直在使用WebApi进行开发,然后转到了WebApi2,Microsoft在该处引入了一个新的IHttpActionResult接口,该接口似乎建议用于返回a的接口HttpResponseMessage。我对这个新界面的优势感到困惑。它似乎主要只是提供了一种 稍微 容易些的创建方式HttpResponseMessage。
IHttpActionResult
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因为您现有的代码所生成的a HttpResponseMessage不适合罐装响应之一。但是,您可以适应HttpResponseMessage于IHttpActionResult使用的罐头回应ResponseMessage。我花了一些时间才弄清楚这一点,因此我想将其发布,以表明您不必选择其中一个:
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是ApiController您的控制器应继承的基类的方法。
ApiController