一、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. PowerShell 中的目录文件管理

    前面的一篇文章我们说了部分在PS中进行文件浏览的基本概念,说到了几个虚拟驱动器的概念.并没有深入的描述相关的命令,这里我们进一步对这一知识点进行描述. 2.1 管理当前工作路径/位置 在日常管理中经常 ...

  2. 【转】ARM Linux 3.x的设备树(Device Tree)

    原文网址:http://blog.csdn.net/21cnbao/article/details/8457546 1.    ARM Device Tree起源 Linus Torvalds在201 ...

  3. 给Eclipse安装Google app engine插件

    1.一般的做法: 参考:https://developers.google.com/eclipse/docs/install-eclipse-4.3 2. 因为 上面的做法一直没有成功,改为下载离线包 ...

  4. Razor Generator 将cshtml自动生成对应的CS文件

  5. Ajax 获取数据代码

    无刷新获取字符串: Html网页中: <script> //定义异步对象 var xmlHttp; //封装方法 function CreateXMLHTTP() { try { xmlH ...

  6. GCD 延时操作

    dispatch_after(dispatch_time(DISPATCH_TIME_NOW, (int64_t)(delayInSeconds * NSEC_PER_SEC)), dispatch_ ...

  7. leetcode先刷_Unique Paths II

    那么上述问题,假设这个矩阵堵塞障碍,不能在若干组合前面所用的方法,因为这么多的位置实际上是没有办法的事儿. 还有剩下的唯一合理的解决方案dp该.与最低要求,并且等,从右下角以前突起,对于位置(i, j ...

  8. 动态修改UINavigationBar的背景色

    这是我们最终想要得到的效果: 思路 在UISrollView的delegate方法 1  - (void)scrollViewDidScroll:(UIScrollView *)scrollView ...

  9. 用函数式的 Swift 实现图片转字符画的功能

    今天整理 Pocket 中待看的文章,看到这篇<Creating ASCII art in functional Swift>,讲解如何用 Swift 将图片转成 ASCII 字符.具体原 ...

  10. 引用System.Runtime.Serialization.Json

    vs2012下,重新添加一次System.Runtime.Serialization的引用