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中,也是为了尽早释放上下文对象, 但是如果有一个业务逻辑调用 ...
随机推荐
- Speech Module
Speech Module 1 FIRST_TEN = ["one", "two", "three", "four", ...
- Mac OS X Mavericks使用手册
基本信息 作者: 施威铭研究室 出版社:清华大学出版社 ISBN:9787302386018 上架时间:2014-12-30 出版日期:2015 年1月 开本:16 版次:1-1 所属分类: 计算机 ...
- impala编译
impala编译 编译系统centos 5.10 说明:版本1.3.x----2.1.x都能编译 一.预装库 1.gcc安装 yum install gcc44 yum install gcc44-c ...
- 选择排序(Selection Sort)
选择排序就是在选择数组元素上做文章,关键是如何选择?选择的标准是什么?选择之后放在哪?所有这些都是选择排序的问题. 选择排序算法中,通常会有以下操作: 从数组第一个元素开始. 遍历整个数组,找到最小的 ...
- July 【补题】
A(zoj 3596) bfs,记忆搜都可以, 按余数来记录状态. B(zoj 3599) 博弈,跳过 C(zoj 3592) 简单dp,题意不好懂 D(zoj 3602) 子树哈希, 对根的左右儿子 ...
- windows可以登录qq,但无法打开浏览器页面
1.检查dns是否配置. 2.检查hosts是否有异常. 3.电脑上装有抓包软件,为IE设置代理服务器了. 4.360网络修复.
- 【转】Linux下socket keep alive讲解
[需求]不影响服务器处理的前提下,检测客户端程序是否被强制终了.[现状]服务器端和客户端的Socket都设定了keepalive属性.服务器端设定了探测次数等参数,客户端.服务器只是打开了keepal ...
- [转]Laravel 4之路由
Laravel 4之路由 http://dingjiannan.com/2013/laravel-routing/ Laravel 4路由是一种支持RESTful的路由体系, 基于symfony2的R ...
- Android应用程序注冊广播接收器(registerReceiver)的过程分析
前面我们介绍了Android系统的广播机制,从本质来说,它是一种消息订阅/公布机制,因此,使用这样的消息驱动模型的第一步便是订阅消息:而对Android应用程序来说,订阅消息事实上就是注冊广播接收器, ...
- vue-resource插件使用
本文的主要内容如下: 介绍vue-resource的特点 介绍vue-resource的基本使用方法 基于this.$http的增删查改示例 基于this.$resource的增删查改示例 基于int ...