ASP.NET Web API 2 之 HttpRequestMessage 对象
Ø 前言
在 Web API 中经常会使用到 HttpRequestMessage 和 HttpResponseMessage 对象,这两个对象封装了对 Web API 的请求和响应,位于 System.Net.Http.dll 程序集的 System.Net.Http 命名空间中。它们是 Web API 处理请求和响应消息的两个重要对象,也是与程序员打交道最直接的两个对象。本文主要讨论以下几点:
1. System.Net.Http.HttpRequestMessage 的应用场景。
2. System.Net.Http.HttpRequestMessage 对象的常用属性。
1. System.Net.Http.HttpRequestMessage 的应用场景
1) 继承与 System.Net.Http.DelegatingHandler 类的消息处理程序
1. 应用包括:请求参数验证、授权验证、日志记录、自定义响应参数等。
2. 示例:
1) 申明消息处理程序
public class CustomerHandler : DelegatingHandler
{
protected override Task<HttpResponseMessage> SendAsync(HttpRequestMessage request, CancellationToken cancellationToken)
{
//这里:请求参数验证、授权验证、日志记录、自定义响应参数等
base.SendAsync(request, cancellationToken);
}
}
2) 注册全局消息处理程序,在 WebApiConfig.Register() 方法中加入代码:
config.MessageHandlers.Add(new CustomerHandler());
2) Web API 接口申明
[Route("getBindOrderInfo"), HttpGet]
public HttpResponseMessage GetBindOrderInfo(HttpRequestMessage request, long orderId)
{
return CreateHttpResponse(request, () =>
{
//这里:查询数据等
return request.CreateResponse<bool>(HttpStatusCode.OK, true);
});
}
2. System.Net.Http.HttpRequestMessage 对象的常用属性
1) Content,获取或设置 HTTP 消息的内容。该属性是一个 System.Net.Http.HttpContent 类型,声明如下:
public HttpContent Content { get; set; }
2) Headers,获取 HTTP 请求标头的集合。该属性是一个 System.Net.Http.Headers.HttpRequestHeaders 类型,声明如下:
public HttpRequestHeaders Headers { get; }
3) Method,获取或设置 HTTP 请求信息使用的 HTTP 方法。该属性是一个 System.Net.Http.HttpMethod 类型,声明如下:
public HttpMethod Method { get; set; }
4) Properties,获取 HTTP 请求的属性集。该属性是一个 object 类型的字典类型,声明如下:
public IDictionary<string, object> Properties { get; }
1. 获取 System.Web.HttpContextBase 对象
System.Web.HttpContextBase httpContextBase = httpRequest.Properties["MS_HttpContext"] as System.Web.HttpContextWrapper;
Ø 该对象的实际类型是 System.Web.HttpContextWrapper 类型,直接继承于 System.Web.HttpContextBase 类。
2. 获取 System.Web.Http.Controllers.HttpRequestContext 对象
System.Web.Http.Controllers.HttpRequestContext httpRequestContext = httpRequest.Properties["MS_RequestContext"] as System.Web.Http.Controllers.HttpRequestContext;
Ø 该对象的实际类型是 System.Web.Http.WebHost.WebHostHttpRequestContext 类型,但是访问级别是 internal(程序集内部访问),直接继承于 System.Web.HttpContextBase 类。
3. 获取 System.Threading.SynchronizationContext 对象
System.Threading.SynchronizationContext synchronizationContext = httpRequest.Properties["MS_SynchronizationContext"] as System.Threading.SynchronizationContext;
Ø 该对象的实际类型是 System.Web.AspNetSynchronizationContext 类型,但是访问级别是 internal(程序集内部访问),间接继承于 System.Threading.SynchronizationContext 类。
4. 获取 System.Web.Http.HttpConfiguration 对象
System.Web.Http.HttpConfiguration HttpConfiguration = httpRequest.Properties["MS_HttpConfiguration"] as System.Web.Http.HttpConfiguration;
Ø 该对象是一个唯一的全局对象,与 WebApiConfig.Register() 方法的 config 参数是同一个实例。
5) RequestUri,获取或设置 HTTP 请求的 System.Uri。该属性是一个 System.Uri 类型,声明如下:
public Uri RequestUri { get; set; }
Ø 总结
本文简单的介绍了 HttpRequestMessage 对象,对该对象有了一个初步的认识。其实,只了解这些,还是远远不够的。
更多学习可参考:
http://www.cnblogs.com/wk1234/archive/2012/05/07/2486872.html
最新文章
- 【Win10】UAP/UWP/通用 开发之 x:Bind
- SQLServer学习笔记系列10
- 如何禁用wordpress的RSS Feed
- 当webshell不可执行cmshell时 (菜刀的安全模式!)可用此脚本突破执行cmd命令
- linux卸载mysql,apache,php
- c语言学习笔记
- GlassFish Server is a compliant implementation of the Java EE 7 platform
- chkconfig-增加一个服务设置服务自启动
- BZOJ 1415: [Noi2005]聪聪和可可( 最短路 + 期望dp )
- 在nagios中使用python脚本监控linux主机
- Spark技术内幕:Shuffle Pluggable框架详解,你怎么开发自己的Shuffle Service?
- Ubuntu15.10下制作Linux 操作系统优盘启动盘
- php 设计模式(转)
- 在IDEA中spring程序可以正常运行,但IDE报错Could not autowire.
- docker 容器的使用
- [UE4]爆头和穿墙
- 推荐一个lamp的一键安装包
- Digits of Factorial LightOJ - 1045(数学题?)
- Css-常用css初始化
- localStorage,sessionStorage