Ø  前言

在 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

ASP.NET Web API 2 之 HttpRequestMessage 对象的更多相关文章

  1. ASP.NET Web API路由系统:路由系统的几个核心类型

    虽然ASP.NET Web API框架采用与ASP.NET MVC框架类似的管道式设计,但是ASP.NET Web API管道的核心部分(定义在程序集System.Web.Http.dll中)已经移除 ...

  2. ASP.NET Web API标准的“管道式”设计

    ASP.NET Web API的核心框架是一个消息处理管道,这个管道是一组HttpMessageHandler的有序组合.这是一个双工管道,请求消息从一端流入并依次经过所有HttpMessageHan ...

  3. Self Host模式下的ASP. NET Web API是如何进行请求的监听与处理的?

    构成ASP.NET Web API核心框架的消息处理管道既不关心请求消息来源于何处,也不需要考虑响应消息归于何方.当我们采用Web Host模式将一个ASP.NET应用作为目标Web API的宿主时, ...

  4. ASP.NET Web API框架揭秘:路由系统的几个核心类型

    ASP.NET Web API框架揭秘:路由系统的几个核心类型 虽然ASP.NET Web API框架采用与ASP.NET MVC框架类似的管道式设计,但是ASP.NET Web API管道的核心部分 ...

  5. ASP.NET Web API 路由对象介绍

    ASP.NET Web API 路由对象介绍 前言 在ASP.NET.ASP.NET MVC和ASP.NET Web API这些框架中都会发现有路由的身影,它们的原理都差不多,只不过在不同的环境下作了 ...

  6. ASP.NET Web API的核心对象:HttpController

    ASP.NET Web API的核心对象:HttpController 对于ASP.NET Web API来说,所谓的Web API定义在继承自ApiController的类中,可能ApiContro ...

  7. 解决ASP.NET Web API Json对象循环参考错误

    前言 一般我们在开法 ASP.NET Web API 时,如果是使用 Entity Framework 技术来操作数据库的话,当两个 Entity 之间包含导览属性(Navigation Proper ...

  8. HttpActionDescriptor,ASP.NET Web API又一个重要的描述对象

    HttpActionDescriptor,ASP.NET Web API又一个重要的描述对象 通过前面对“HttpController的激活”的介绍我们已经知道了ASP.NET Web API通过Ht ...

  9. 利用查询条件对象,在Asp.net Web API中实现对业务数据的分页查询处理

    在Asp.net Web API中,对业务数据的分页查询处理是一个非常常见的接口,我们需要在查询条件对象中,定义好相应业务的查询参数,排序信息,请求记录数和每页大小信息等内容,根据这些查询信息,我们在 ...

随机推荐

  1. 每天一个linux命令(1):wc命令

    Linux系统中的wc(Word Count)命令的功能为统计指定文件中的字节数.字数.行数,并将统计结果显示输出. 1.命令格式: wc [选项]文件... 2.命令功能: 统计指定文件中的字节数. ...

  2. 「SCOI2016」萌萌哒 解题报告

    「SCOI2016」萌萌哒 这思路厉害啊.. 容易发现有个暴力是并查集 然后我想了半天线段树优化无果 然后正解是倍增优化并查集 有这个思路就简单了,就是开一个并查集代表每个开头\(i\)每个长\(2^ ...

  3. String Reconstruction (并查集)

    并查集维护和我这个位置的字母连续的已经被填充的字母能到达的最右边的第一个还没有填充的位置,然后把这个位置填上应该填的东西,然后把这个位置和下一个位置连接起来,如果下一个位置还没有填,我就会把下一个位置 ...

  4. [WC2010]重建计划(分数规划+点分治+单调队列)

    题目大意:给定一棵树,求一条长度在L到R的一条路径,使得边权的平均值最大. 题解 树上路径最优化问题,不难想到点分治. 如果没有长度限制,我们可以套上01分数规划的模型,让所有边权减去mid,求一条路 ...

  5. javascript柯里化及组合函数~

    大家是不是看我上篇博文有点蒙.用的的curry和compose是什么鬼,怎么那么神奇.上篇博文也是主要用到了这两个函数.那今天我们来聊一下curry和compose,这两个东西是函数式编程很重要的东西 ...

  6. java ArrayList去重

    对list集合中的重复值进行处理,大部分是采用两种方法, 一种是用遍历list集合判断后赋给另一个list集合, 另一种是用赋给set集合再返回给list集合. 方法1:set集合去重,不打乱顺序 L ...

  7. A1125. Chain the Ropes

    Given some segments of rope, you are supposed to chain them into one rope. Each time you may only fo ...

  8. A1017. Queueing at Bank

    Suppose a bank has K windows open for service. There is a yellow line in front of the windows which ...

  9. (转)visual stdio 书签功能介绍

    http://www.mycode.net.cn/tools/1615.html 使用 Visual Studio 开发过程中,你很容易遇到一种情况就是多个文件来回的切换,在每一块实现不同的业务,打开 ...

  10. PHP快速排序算法

    说明: 通过设置一个初始中间值,来将需要排序的数组分成3部分,小于中间值的左边,中间值,大于中间值的右边,继续递归用相同的方式来排序左边和右边,最后合并数组 示例: <?php $a = arr ...