HttpContext请求上下文对象
一、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请求上下文对象的更多相关文章
- [译] ASP.NET 生命周期 – ASP.NET 上下文对象(七)
使用 HttpRequest 对象 HttpRequest 对象描述的是一个正在被处理的 HTTP 请求.下表列举了 HttpRequest 中的属性,它们提供了当前请求的相关信息(HttpReque ...
- Flask--偏函数, 线程安全, 请求上下文
一 . 偏函数 from functools import partial def func(a, b): return a + b new_func = partial(func, 3, 4) # ...
- flask基础之AppContext应用上下文和RequestContext请求上下文(六)
前言 应用上下文和请求上下文存在的目的,官方文档讲的很清楚,可参考: http://www.pythondoc.com/flask/appcontext.html 应用上下文对象在没有请求的时候是可以 ...
- flask 源码专题(二):请求上下文与全文上下文
源码解析 0. 请求入口 if __name__ == '__main__': app.run() def run(self, host=None, port=None, debug=None, lo ...
- flask框架(七)——蓝图、请求上下文、g对象、信号、flask_session
蓝图 作用:对程序进行目录结构划分 不使用蓝图情况下,自己分文件 目录结构: -templates -views -__init__.py -user.py -order.py -app.py app ...
- 上下文对象-请求对象-响应对象(ServletContext - response - request)
目录 上下文对象-请求对象-响应对象 ServletContext response request 上下文对象-请求对象-响应对象 ServletContext 什么是ServletContext ...
- Flask框架 (四)—— 请求上下文源码分析、g对象、第三方插件(flask_session、flask_script、wtforms)、信号
Flask框架 (四)—— 请求上下文源码分析.g对象.第三方插件(flask_session.flask_script.wtforms).信号 目录 请求上下文源码分析.g对象.第三方插件(flas ...
- flask的请求上下文request对象
Flask从客户端收到请求时,要让视图函数能访问请求对象request ,才能处理请求.我们可以将request对象作为参数传到试图函数里,比如: from flask import Flask, r ...
- EF上下文对象线程内唯一性与优化
在一次请求中,即一个线程内,若是用到EF数据上下文对象,就创建一个,这也加是很多人的代码中习惯在使用上下文对象时,习惯将对象建立在using中,也是为了尽早释放上下文对象, 但是如果有一个业务逻辑调用 ...
随机推荐
- SQL 如何表示引号
SELECT ename || '''' || ' 的工作是 ' || ' ' || job || '''' AS msg FROM emp WHERE deptno = 10; ' '' ' 第一个 ...
- libeXosip2(1-3) -- How-To send or update registrations.
How-To send or update registrations. The eXtented eXosip stack Initiate a registration To start a re ...
- STL中istream_iterator和ostream_iterator的基本用法
标准程序库定义有供输入及输出用的iostream iterator类,称为istream_iterator和ostream_iterator,分别支持单一型别的元素读取和写入.使用这两个iterato ...
- Binary Search Tree DFS Template
Two methods: 1. Traverse 2. Divide & Conquer // Traverse: usually do not have return value publi ...
- nodejs 设置网络代理
在使用nodejs的过程中,加入使用代理上网,那么安装组件会失败,此时配置代理即可,命令如下: [root@oracle ~]#npm config set proxy=http://10.101.1 ...
- oracle 12g sqlplus安装
一.下载oracle 12g sqlplus软件 linux 64位操作系统,oracle安装包地址 http://www.oracle.com/technetwork/topics/linuxx86 ...
- linux学习方法之二
相信不少想学习linux的新手们正愁不知道看什么linux学习教程好,下面小编给大家收集和整理了几点比较重要的教程,供大家学习,如需想学习更多的话,可到wdlinux学堂寻找更多教程. 安装php扩展 ...
- Android加载图片OOM错误解决方式
前几天做项目的时候,甲方要求是PAD (SAMSUNG P600 10.1寸 2560*1600)的PAD上显示高分辨率的大图片. SQLITE採用BOLD方式存储图片,这个存取过程就不说了哈,网上一 ...
- 获取客户端IP地址定位城市信息
获取客户端IP地址定位城市信息 1.首先获取客户端的IP地址 function getIPaddress(){ $IPaddress=''; if (isset($_SERVER)){ if (iss ...
- java判断数据类型两种方式
instanceof String s = ""; System.out.println(s instanceof String); // true simp ...