标签:
在WebAPI中HttResponseMessage作为消息返回,而在ApiController中我们经常讲四类数据作为返回值,void,object(可序列化),IHttpActionResult,HttpMessage,
Void:返回状态码200,无数据
Object: 返回状态码200,数据
WebAPI为我们定义了一IHttpActionResult接口,从命名我们就可以来它是作为Action执行的返回结果。
在WebAPI总已经定义了很多实现了IHttpActionResult的类:
这些类大致可以分为:只有状态码,重定向,实体序列化,错误信息,201Created等几类。
状态码
CodeStatusResult:指定状态码
BadRequestResult:400
OkResult:200
NotFoundResult:404
UnAuthorizedResult:401
ConflictResult:409
InternalServerErrorResult:500
重定向
状态码302,并返回重定向url
RedirectResult:按绝对路径
RedirectToRouteResult:按路由
WebApi为我们提供了一个UrlHelp类,可实现路由向绝对路径的转换
实体序列化
FormattedContentResult<T>:自定义序列化方式与状态码
NegotiatedContentResult<T>:自定义状态码,根据请求头信息匹配序列化类型
OkNegotiatedContentResult<T>:状态码200,根据请求头信息匹配序列化类型
JsonResult<T>:状态码200,Json序列化
错误信息
ExceptionResult:500, eg: {"Message":"出现错误。","ExceptionMessage":"未实现该方法或操作。","ExceptionType":"System.NotImplementedException","StackTrace":null}
BadRequestErrorMessageResult:400,eg: {"Message":"Error"}
InvalidModelStateResult:400,Model绑定错误,eg: {"Message":"请求无效。","ModelState":{"argument":["值不在预期的范围内。"],"implemented":["未实现该方法或操作。"]}}
这三种类型最终都是装换成HttpError
201 Created
CreatedNegotiatedContentResult<T>与CreatedAtRouteNegotiatedContentResult<T>
返回"201 Created"的状态。
同时ApiController也为我们定义许多返回IHttpActionResult的方法
HttpResponseMessage表示包括状态代码和数HTTP 响应消息。在整个WebAPI中HttpResponseMessage是作为最终的请求结果,自然HttpResponseMessag可以作为Action的返回结果。如果单从返回数据上看我们可以只关心状态码(StatusCode),内容(Content),头信息(Headers)。
其中WebAPI为我们定义很多HttpContent的派生类。
ByteArrayContent
FormUrlEncodedContent
MultipartContent
MultipartFormDataContent
StreamContent
StringContent
不管是Void,object,IHttpActionResult都将生成HttpResponseMessage。
IhttpActionResult接口中只定义了一个ExecuteAsync方法
Task<HttpResponseMessage> ExecuteAsync(CancellationToken cancellationToken);
所以IHttpActionResult可以很容易得到HttpResponseMessage
Github: https://github.com/BarlowDu/WebAPI (API_3)
标签:
原文地址:http://www.cnblogs.com/gangtianci/p/4776841.html