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 { getset; }

 

2)   Headers,获取 HTTP 请求标头的集合。该属性是一个 System.Net.Http.Headers.HttpRequestHeaders 类型,声明如下:

public HttpRequestHeaders Headers { get; }

 

3)   Method,获取或设置 HTTP 请求信息使用的 HTTP 方法。该属性是一个 System.Net.Http.HttpMethod 类型,声明如下:

public HttpMethod Method { getset; }

 

4)   Properties,获取 HTTP 请求的属性集。该属性是一个 object 类型的字典类型,声明如下:

public IDictionary<stringobject> 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 { getset; }

 

Ø  总结

本文简单的介绍了 HttpRequestMessage 对象,对该对象有了一个初步的认识。其实,只了解这些,还是远远不够的。

更多学习可参考:

MVC4 WebAPI(二)——Web API工作方式 - wangking1029 - 博客园

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值