标签:
这篇文章主要是从英文翻译过来的,原文地址http://www.asp.net/web-api/overview/getting-started-with-aspnet-web-api/action-results
本文主要介绍ASP.NET WebAPI如何转换API返回值到HTTP响应消息的。
一个WebAPI可以返回下面类型中的一个:
1、void
2、HttpResponseMessage
3、IHttpActionResult
4、别的类型
更具上面的不同返回类型,WebAPI使用不同的机制创建HTTP响应消息。
Return type | How Web API creates the response |
---|---|
void | Return empty 204 (No Content) |
HttpResponseMessage | Convert directly to an HTTP response message. |
IHttpActionResult | Call ExecuteAsync to create an HttpResponseMessage, then convert to an HTTP response message. |
Other type | Write the serialized return value into the response body; return 200 (OK). |
先面将介绍四种类型的详细信息。
void
如果API函数返回类型是void,WebAPI将返回状态码为204的空HTTP 响应消息,如下代码:
public class ValuesController : ApiController { public void Post() { } }
HTTP 响应:
HTTP/1.1 204 No Content Server: Microsoft-IIS/8.0 Date: Mon, 27 Jan 2014 02:13:26 GMT
如果返回HttpResponseMessage类型,Web API将返回值直接转换成HTTP响应消息,使用HttpResponseMessage的属性对象填充响应。如下:
public class ValuesController : ApiController { public HttpResponseMessage Get() { HttpResponseMessage response = Request.CreateResponse(HttpStatusCode.OK, "value"); response.Content = new StringContent("hello", Encoding.Unicode); response.Headers.CacheControl = new CacheControlHeaderValue() { MaxAge = TimeSpan.FromMinutes(20) }; return response; } }
HTTP响应:
HTTP/1.1 200 OK Cache-Control: max-age=1200 Content-Length: 10 Content-Type: text/plain; charset=utf-16 Server: Microsoft-IIS/8.0 Date: Mon, 27 Jan 2014 08:53:35 GMT hello
上边的代码创建一个HttpResponseMessage的类型变量,直接使用原本要返回的值去生成这个HttpResponseMessage变量。然后在返回该变量。
IhttpActionResult接口定义在WebAPI 2中。它定义一个HttpResponseMessage的工厂。它定义一个简单的函数ExecuteAsync,用来异步HttpResponseMessage
public interface IHttpActionResult { Task<HttpResponseMessage> ExecuteAsync(CancellationToken cancellationToken); }
如果API返回IHttpActionResult,WebAPI调用ExecuteAsync函数创建一个HttpResponseMessage。再将HttpResponseMessage转换到HTTP响应消息。
public class ValuesController : ApiController
{
public IHttpActionResult Get()
{
return new TextResult("hello", Request);
}
}
HTTP响应:
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
其余类型
……
WebAPi学习笔记之 Api和返回类型(Action Results in Web API 2)
标签:
原文地址:http://www.cnblogs.com/lonel-yboy/p/4427768.html