HttpContext请求上下文对象

1、HttpContext概述

  HttpContext基于HttpApplication的处理管道,因为HttpContext对象贯穿整个处理过程,因此,能够从HttpApplication处理管道的前端将状态数据传递到管道的后端,完成状态的传递任务。html

  HttpContext的生命周期从服务器接收的HTTP请求开始到反应发送回客户端结束。前端

  在WebForm或类库(包括MVC)项目中,经过Current静态属性,就可以得到HttpContext的对象。后端

  HttpContext context = HttpContext.Current;

  若是是在Asp.net MVC的Controller中,经过this.HttpContext;就能获取到HttpContextBase对象。服务器

  HttpContextBase context = this.HttpContext;

  若是是在MVC视图中能够这样获得:this

  @Html.ViewContext.HttpContext

  在MVC中是HttpContextBase在WebForm中是HttpContext。url

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

  新建一个WebForm程序,输入代码以下:.net

        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));  
        }

  输出以下:code

  

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

2、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的实例属性来实现。

3、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();
        }

  输出:

  

相关文章
相关标签/搜索