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中,也是为了尽早释放上下文对象, 但是如果有一个业务逻辑调用 ...
随机推荐
- InnoSetup中枚举出INI文件的所有sections和键值
原文 http://blog.chinaunix.net/uid-23480430-id-3016899.html InnoSetup支持一些INI文件操作函数, 例如GetIniString,Ini ...
- 【转】ubuntu设置PATH----不错
原文网址:http://no001.blog.51cto.com/1142339/554927 试了好多遍,多无效.. 最后在/etc/enviroment下设置才有效. 不过让有一些未解问题 我使用 ...
- C/C++内存存储问题
#include <stdio.h> #include "string.h" #include "malloc.h" void Swap(int a ...
- 链表的基本操作(Basic Operations on a Linked List)
链表可以进行如下操作: 创建新链表 增加新元素 遍历链表 打印链表 下面定义了对应以上操作的基本函数. 创建新链表 新链表创建之后里面并没有任何元素,我们要为数据在内存中分配节点,再将节点插入链表.由 ...
- ofbiz ins
- Java应用开发的一条经验
一旦为应用建立良好的基础设施, 后续的开发就会变得容易而快速. 这些基础设施包括: 1. 线程池的建立.配置: 在 JDK 并发库的基础上建立更适合于应用的并发使用接口: 2. 跨多数据源的 ...
- python3-day3(深浅copy)
1.对于 数字 和 字符串 而言,赋值.浅拷贝和深拷贝无意义,因为其永远指向同一个内存地址. import copy n1 = 123 print(id(n1)) n2 = n1 print(id(n ...
- 【SVN Working copy is too old (format 10, created by Subversion 1.6)】解决方式
SVN同步或者提交的时候出现类似错误信息: The working copy needs to be upgraded svn: Working copy 'D:\adt-bundle-windows ...
- IDataParameter调用存储过程
public string GenerateExamePaper(string paperType, string driverID, string MacAddr) { ...
- WEB服务器6--IIS架构补充篇
第一部分我将谈谈IIS的两个不同的版本—IIS 5.x 和 IIS 6的处理模型:IIS如何监听来自外界的Http request,如何根据ISAPI Extension Mapping将对于不同Re ...