該IHttpActionResult界面中的Web API 2,從本質上講,它定義了一個介紹HttpResponseMessage工廠。如下是使用IHttpActionResult接口的一些優勢:1
- 簡化對控制器的單元測試。
- 將用於將HTTP響應建立爲單獨類的經常使用邏輯。
- 經過隱藏構建響應的低級細節,使控制器動做的意圖更清晰。
IHttpActionResult包含一個單獨的方法ExecuteAsync,它異步建立一個HttpResponseMessage實例。
public interface IHttpActionResult
{
Task<HttpResponseMessage> ExecuteAsync(CancellationToken cancellationToken);
}
若是控制器操做返回IHttpActionResult,Web API將調用ExecuteAsync方法來建立HttpResponseMessage。而後將HttpResponseMessage轉換爲HTTP響應消息。2
這是IHttpActionResult的簡單實現,它建立一個純文本響應:
public class TextResult : IHttpActionResult
{
string _value;
HttpRequestMessage _request;
public TextResult(string value, HttpRequestMessage request) {
_value = value;
_request = request;
}
public Task<HttpResponseMessage> ExecuteAsync(CancellationToken cancellationToken) {
var response = new HttpResponseMessage()
{
Content = new StringContent(_value),
RequestMessage = _request
};
return Task.FromResult(response);
}
}
示例控制器操做:
public class ValuesController : ApiController
{
public IHttpActionResult Get() {
return new TextResult("hello", Request);
}
}
響應:
HTTP/1.1 200 OK
Content-Length: 5
Content-Type: text/plain; charset=utf-8
Server: Microsoft-IIS/8.0
Date: Mon, 27 Jan 2014 08:53:35 GMT
hello
一般,您將使用System.Web.Http.Results命名空間中定義的IHttpActionResult實現。該ApiController類定義輔助方法返回這些內置的動做效果。1
在如下示例中,若是請求與現有產品ID不匹配,則控制器將調用ApiController.NotFound以建立404(未找到)響應。不然,控制器調用ApiController.OK,它建立包含產品的200(OK)響應。
public IHttpActionResult Get (int id) {
Product product = _repository.Get (id);
if (product == null)
{
return NotFound();
}
return Ok(product);
}