Ø  前言

在 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. 「SCOI2014」方伯伯的商场之旅 解题报告

    「SCOI2014」方伯伯的商场之旅 我一开始的想法会被两个相同的集合位置去重给搞死,不过应该还是可以写的,讨论起来老麻烦. 可以先钦定在\(1\)号点集合,然后往后调整一部分. 具体一点,通过前缀和 ...

  2. smtp

    新闻系统的定时通知初步有三种实用方式,1.短信 2.邮箱 3.微信 短信就不得不使用第三方平台,虽说5分一条,但耐不住量大,一天1000条的话,50元也是一笔不小的支出. 这时,邮箱和微信的优势就体现 ...

  3. centos7搭建ELK Cluster集群日志分析平台(一):Elasticsearch

    应用场景: ELK实际上是三个工具的集合,ElasticSearch + Logstash + Kibana,这三个工具组合形成了一套实用.易用的监控架构, 很多公司利用它来搭建可视化的海量日志分析平 ...

  4. poj 1611 The Suspects(并查集输出集合个数)

    Description Severe acute respiratory syndrome (SARS), an atypical pneumonia of unknown aetiology, wa ...

  5. js 刷新

    方法一: location.reload 重新加载 location.reload(); 如果该方法没有规定参数,或者参数是 false,它就会用 HTTP 头 If-Modified-Since 来 ...

  6. jQuery ajax读取本地json文件

    jQuery ajax读取本地json文件 json文件 { "first":[ {"name":"张三","sex": ...

  7. Python函数的定义与调用、返回值、参数

    一.函数是什么 函数是组织好的,可重复使用的,用来实现单一,或相关联功能的代码段. 函数能提高应用的模块性,和代码的重复利用率.比如print(),len()等.但你也可以自己创建函数,这被叫做用户自 ...

  8. html 网页背景图片根据屏幕大小CSS自动缩放

    https://blog.csdn.net/coslay/article/details/47109281 腾讯微博和QQ空间的登录背景图片是根据访客的屏幕大小自动缩放的,但是好像是用JQuery代码 ...

  9. PHP的简单工厂模式

    又称为静态工厂方法(Static Factory Method)模式,它属于类创建型模式.在简单工厂模式中,可以根据参数的不同返回不同类的实例.简单工厂模式专门定义一个类来负责创建其他类的实例,被创建 ...

  10. vue实现购物车和地址选配(二)

    参考文献: vue官网: vue.js 效果展示:全选和取消全选,计算总金额 项目源代码:https://github.com/4561231/hello_world 项目核心代码实现及踩坑 1.全选 ...