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中,也是为了尽早释放上下文对象, 但是如果有一个业务逻辑调用 ...
随机推荐
- Linux中C/C++头文件一览
1.Linux中一些头文件的作用: #include <assert.h> //ANSI C.提供断言,assert(表达式) #include <glib.h> ...
- PowerShell3.0中,所有的命令
Get-Command * >> cmd.txt CommandType Name ModuleName ----------- ---- ---------- Alias % -> ...
- linux下tcpdump命令详解
简介 用简单的话来定义tcpdump,就是:dump the traffic on a network,根据使用者的定义对网络上的数据包进行截获的包分析工具. tcpdump可以将网络中传送的数据包的 ...
- print带参数格式
string_1 = "Camelot" string_2 = "place" print("float:%lf. int:%d string:%s. ...
- Lowest Common Ancestor of a Binary Search Tree 解答
Question Given a binary search tree (BST), find the lowest common ancestor (LCA) of two given nodes ...
- Android实现Live Photos 加源代码
在Android手机上实现类似于iphone中的LivePhoto的功能 源代码分享 github:https://github.com/amazingyyc/DeepRed 代码说明: 1.改变视频 ...
- DirectX 初始化DirectX(第一方式)
上一章我们学会了如何C++Win32项目中搭建DirectX开发环境, 那么下面来写代码初始化DirectX吧O(∩_∩)O~. 首先你创建一个Win32程序,点击运行你可以看见一个window窗 ...
- Hug the princess(思维,位运算)
Hug the princess Time Limit: 3000/1000MS (Java/Others) Memory Limit: 65535/65535KB (Java/Others) ...
- UIImageView圆角,自适应图片宽高比例,图片拉伸,缩放比例和图片缩微图
/* 设置圆角,通过layer中的cornerRadius和masksToBounds即可. 自适应图片宽高比例.通过UIViewContentModeScaleAsp ...
- iOS8 Core Image In Swift:人脸检测以及马赛克
iOS8 Core Image In Swift:自动改善图像以及内置滤镜的使用 iOS8 Core Image In Swift:更复杂的滤镜 iOS8 Core Image In Swift:人脸 ...