博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
HttpContext请求上下文对象
阅读量:6004 次
发布时间:2019-06-20

本文共 2773 字,大约阅读时间需要 9 分钟。

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

  输出:

  

转载地址:http://ccsmx.baihongyu.com/

你可能感兴趣的文章
关键帧动画结束后会有短暂停顿
查看>>
对香港印象极差
查看>>
oracle中 connect by prior 递归算法
查看>>
[Noi2014] 魔法森林
查看>>
每日一个机器学习算法——LR(逻辑回归)
查看>>
转载-Webp格式用户Android客户端
查看>>
关键字的作用
查看>>
多态时:成员特点,成员变量
查看>>
【ZZ】常用推荐算法
查看>>
Linux内核中链表的实现与应用【转】
查看>>
创建进程及进程相关方法
查看>>
C语言将字符串转换成对应的数字(十进制、十六进制)【转】
查看>>
正则表达式【TLCL】
查看>>
WebService
查看>>
mybatis的if判断integer
查看>>
LeetCode OJ:Length of Last Word(最后一个词的长度)
查看>>
python的defaultdict
查看>>
【项目管理】中小公司PMO不一样期间的责任
查看>>
Eclipse添加maven之后报错 Eclipse is running in a JRE, but a JDK is required 解决方法
查看>>
jQuery插件开发
查看>>