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

  输出:

  

HttpContext请求上下文对象的更多相关文章

  1. [译] ASP.NET 生命周期 – ASP.NET 上下文对象(七)

    使用 HttpRequest 对象 HttpRequest 对象描述的是一个正在被处理的 HTTP 请求.下表列举了 HttpRequest 中的属性,它们提供了当前请求的相关信息(HttpReque ...

  2. Flask--偏函数, 线程安全, 请求上下文

    一 . 偏函数 from functools import partial def func(a, b): return a + b new_func = partial(func, 3, 4) # ...

  3. flask基础之AppContext应用上下文和RequestContext请求上下文(六)

    前言 应用上下文和请求上下文存在的目的,官方文档讲的很清楚,可参考: http://www.pythondoc.com/flask/appcontext.html 应用上下文对象在没有请求的时候是可以 ...

  4. flask 源码专题(二):请求上下文与全文上下文

    源码解析 0. 请求入口 if __name__ == '__main__': app.run() def run(self, host=None, port=None, debug=None, lo ...

  5. flask框架(七)——蓝图、请求上下文、g对象、信号、flask_session

    蓝图 作用:对程序进行目录结构划分 不使用蓝图情况下,自己分文件 目录结构: -templates -views -__init__.py -user.py -order.py -app.py app ...

  6. 上下文对象-请求对象-响应对象(ServletContext - response - request)

    目录 上下文对象-请求对象-响应对象 ServletContext response request 上下文对象-请求对象-响应对象 ServletContext 什么是ServletContext ...

  7. Flask框架 (四)—— 请求上下文源码分析、g对象、第三方插件(flask_session、flask_script、wtforms)、信号

    Flask框架 (四)—— 请求上下文源码分析.g对象.第三方插件(flask_session.flask_script.wtforms).信号 目录 请求上下文源码分析.g对象.第三方插件(flas ...

  8. flask的请求上下文request对象

    Flask从客户端收到请求时,要让视图函数能访问请求对象request ,才能处理请求.我们可以将request对象作为参数传到试图函数里,比如: from flask import Flask, r ...

  9. EF上下文对象线程内唯一性与优化

    在一次请求中,即一个线程内,若是用到EF数据上下文对象,就创建一个,这也加是很多人的代码中习惯在使用上下文对象时,习惯将对象建立在using中,也是为了尽早释放上下文对象, 但是如果有一个业务逻辑调用 ...

随机推荐

  1. VIJOS 1052贾老二算算术 (高斯消元)

    描述 贾老二是个品学兼优的好学生,但由于智商问题,算术学得不是很好,尤其是在解方程这个方面.虽然他解决 2x=2 这样的方程游刃有余,但是对于 {x+y=3 x-y=1} 这样的方程组就束手无策了.于 ...

  2. 2015北大夏令营day1 B:An Idea of Mr. A

    题意:给定一个范围l,r计算i,j(i<j)属于这个范围内的gcd(2^(2^i)+1,2^(2^j)+1)的总和. 思路:费马数的应用,让我惊呆的是当年居然有123个人会做,我tm毛都不会.. ...

  3. CRC校验源码分析

    这两天做项目,需要用到 CRC 校验.以前没搞过这东东,以为挺简单的.结果看看别人提供的汇编源程序,居然看不懂.花了两天时间研究了一下 CRC 校验,希望我写的这点东西能够帮助和我有同样困惑的朋友节省 ...

  4. 2013第50周二eclipse工具尝试

    今天更深入的认识了eclipse开发工具,出现了各种问题在网络的帮助下最终都解决了,感觉似乎明白了很多道理需要总结一下,现在发现晚了,那就先记录下我印象深的几个问题吧: 1.eclipse编辑器设置. ...

  5. 不得不看的JVM内存管理

    作为一个任何完整的机器都会有内存管理这块组成结构.作为jvm也有自己的内存管理. 1.那么在java中哪些组件需要使用内存. a)        Java堆 b)       线程:线程是在jvm运行 ...

  6. Dom4j解析xml格式的字符串【java】

    一般我们会使用dom4j.SAX.w3c来解析xml文件,网上也大多提供此类解决方案. 但在实际项目中,也有会解析xml格式的字符串报文的. 比如,有如下字符串: String = "< ...

  7. PHP连接sql server 2005环境配置

    一.Windows下PHP连接SQLServer 2005 设定:安装的Windows操作系统(Win7 或XP均可.其它系统暂未測试),在C盘下:PHP的相关文件位于c:/PHP以下,其配置文件ph ...

  8. Android开发之去掉标题栏的三种方法,推荐第三种

    Android:去掉标题栏的三种方法和全屏的三种方法 第一种:一般入门的时候常常使用的一种方法 onCreate函数中增加下面代码: requestWindowFeature(Window.FEATU ...

  9. [每日一题] 11gOCP 1z0-052 :2013-09-4 block header grows............................................A33

    转载请注明出处:http://write.blog.csdn.net/postedit/11100311 正确答案是:AD 要理解这道题就要去了解数据块的结构.引用OCPPPT中的一幅图: 从这幅图中 ...

  10. Android 控件 -------- AutoCompleteTextView 动态匹配内容,例如 百度搜索提示下拉列表功能

    AutoCompleteTextView 支持基本的自动完成功能,适用在各种搜索功能中,并且可以根据自己的需求设置他的默认显示数据.两个控件都可以很灵活的预置匹配的那些数据,并且可以设置输入多少值时开 ...