当前位置:首页 » ThinkPHP框架知识

HttpContext请求上下文对象

2014-07-09 10:19 本站整理 浏览(7)

一、HttpContext概述

  HttpContext基于HttpApplication的处理管道,由于HttpContext对象贯穿整个处理过程,所以,可以从HttpApplication处理管道的前端将状态数据传递到管道的后端,完成状态的传递任务。HttpContext的生命周期从服务器接收的HTTP请求开始到反应发送回客户端结束。

在WebForm或类库(包括MVC)项目中,通过Current静态属性,就能够获得HttpContext的对象。

  HttpContext context = HttpContext.Current;
如果是在Asp.net MVC的Controller中,通过this.HttpContext;就能获取到HttpContextBase对象。

  HttpContextBase context = this.HttpContext;
如果是在MVC视图中可以这样得到:

  @Html.ViewContext.HttpContext
在MVC中是HttpContextBase在WebForm中是HttpContext。

另外,还有些地方有人可能会有些困惑,因为貌似HttpContext中有很多对象在Page中也有,例如Request,Response,Cache,Session等等。它们之间有什么关系呢?在这里我们用Session、Request来进行说明。

新建一个WebForm程序,输入代码如下:

protected void Page_Load(object sender, EventArgs e)
        {
            HttpContext context = HttpContext.Current;
            context.Session.Add("1","刘备");
            Response.Write(Page.Session["1"]);      //输出刘备
            Response.Write(object.ReferenceEquals(context.Session, Page.Session));  //输出 True 表明这是同一个对象
            Response.Write(object.ReferenceEquals(context.Request, Page.Request));  
        }

输出如下:

这用不着多说了,HttpContext与Page里的对象是同一个对象。HttpContext之所以也可以获取只是为了方便在类库项目中轻易获得这些请求对象。

二、HttpContext常用属性

  HttpContext常用属性:
名称说明
Application为当前 HTTP 请求获取 HttpApplicationState 对象。
Cache获取当前应用程序域的 Cache 对象。
Current为当前 HTTP 请求获取或设置 HttpContext 对象。
CurrentHandler获取表示当前正在执行的处理程序的 IHttpHandler 对象。
Handler获取或设置负责处理 HTTP 请求的 IHttpHandler 对象。
Items获取可用于在 HTTP 请求过程中在 IHttpModule 接口和 IHttpHandler 接口之间组织和共享数据的键/值集合。
PreviousHandler获取父处理程序的 IHttpHandler 对象。
Profile获取当前用户配置文件的 ProfileBase 对象。
Request为当前 HTTP 请求获取 HttpRequest 对象。
Response为当前 HTTP 响应获取 HttpResponse 对象。
Server获取提供用于处理 Web 请求的方法的 HttpServerUtility 对象。
Session为当前 HTTP 请求获取 HttpSessionState 对象。
SkipAuthorization获取或设置一个值,该值指定 UrlAuthorizationModule 对象是否应跳过对当前请求的授权检查。
Timestamp获取当前 HTTP 请求处理请求的时间点
  对于以上这一个类,写不了什么DEMO。因为全部都是返回对象,要深入研究Asp.net,关键是要深入了解里面返回的这些对象。

protected void Page_Load(object sender, EventArgs e)
        {
            HttpContext context = HttpContext.Current;
            context.Items.Add("kk","通过context存参!");
        }
HttpContext的Current属性很重要,这个属性让你能够在任何地方找到它。

如果希望提供一些静态属性,并且,只希望与一次请求关联,那么建议借助HttpContext.Items的实例属性来实现。

三、HttpContext常用方法

  HttpContext常用方法:
名称说明
AddError将异常添加到当前 HTTP 请求的异常集合中。
ClearError清除当前 HTTP 请求的所有错误。
GetGlobalResourceObject已重载。 获取应用程序级别的资源。
GetLocalResourceObject已重载。 获取页级别的资源。
GetSection获取当前应用程序的默认配置的指定配置节。
RemapHandler用于为请求指定处理程序。
RewritePath重写路径,以便后续的Asp.net以为这是才是真正的地址。RewritePath用在无 Cookie 会话状态中。
  示例:

public ActionResult Index()
        {
            HttpContextBase context = this.HttpContext;
            context.RewritePath("1.html");      //重写url方法,以便后续的Asp.net以后这个是实际的请求地址
            Response.Write(context.Request.Url.AbsolutePath);
            return View();
        }

输出: