架构师_程序员

 找回密码
 注册[Register]

QQ登录

只需一步,快速开始

查看: 1020|回复: 0
打印 上一主题 下一主题

[ASP.NET] asp.net HttpContext的解释意义

[复制链接]
跳转到指定楼层
楼主
发表于 2018-3-13 21:28:21 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
在.ashx中,我们HttpContext这个词,到底是什么意思?下面给大家说说

HttpContext 类:封装有关个别 HTTP 请求的所有 HTTP 特定的信息。

在处理请求执行链的各个阶段中,会有一个对象在各个对象之间进行传递,也即会保存请求的上下文信息,这个对象就是HttpContext对象。HttpContext封装了ASP.NET要处理的单次请求的所有信息。在请求处理机制建立时,HttpContext类有HttpRuntime对象实例化,接着该对象会经历请求生存期的各个阶段


HttpContext的介绍:保持单个用户、单个请求的数据,并且数据只在该请求期间保持。被提供用于保持需要在不同的HttpModules和HttpHandlers之间传递的值。它也可以用于保持某个完整请求的相应信息。

Current属性是个十分有用的静态成员,返回当前请求的HttpContex对象。Items是一个哈希表,在处理请求所涉及的模块和处理程序间共享数据。每个自定义模块或处理程序能够将自身信息添加到请求的HttpContext对象中,在Items中存储的信息最终被页面使用,但这些信息只能在请求的执行期间访问
HttpContext
定义:封装有关个别 HTTP 请求的所有 HTTP 特定的信息。

其实就是Http请求以及返回的所有信息都在里面。

HttpContext来自System.Runtime.Remoting.Messaging.CallContext.HostContext。这个HostContext定义是 获取或设置与当前线程相关联的主机上下文 (所以HttpContext只能在当前请求的线程中使用。)

  1. //为当前 HTTP 请求获取或设置 System.Web.HttpContext 对象。
  2. var con = System.Web.HttpContext.Current;
  3. ///HostContext  获取或设置与当前线程相关联的主机上下文。HttpContext来自HostContext
  4. HttpContext context2 = System.Runtime.Remoting.Messaging.CallContext.HostContext as HttpContext;
  5. //MVC中 HttpContextBase
  6. var conbase = base.HttpContext;
复制代码


HttpContext其实是保存在CallContext.HostContext这个属性中, 如果您还对HostContext感到好奇的话,您可以自己用Reflector.exe去看,我不想再贴代码了,因为有些类型和方法并不是公开的。


  1. HttpContext context1 = HttpContext.Current;

  2.     HttpContext context2 = System.Runtime.Remoting.Messaging.CallContext.HostContext as HttpContext;

  3.     bool isEqual = object.ReferenceEquals(context1, context2);

  4.     Response.Write(isEqual);
复制代码


HttpContext.Current.Items 可以在 HttpModule 和 HTTPHandler 之间共享数据时使用,因为每次用户请求都要通过HTTP 运行时管道HttpModule 、HTTPHandler 。当你实现IHttpMoudle的方法来通过HttpMoudle向用户请求传递信息。你可以用HttpContext.Current.Items 在不同请求页,不同的HttpModule中传输数据,但是一旦请求结束,数据回发,这个集合中的数据将自己丢失。

例如,我们每次请求,想在ef中用同一个DbContext上下文对象,代码如下:


  1. private DbContext GetDbContext()
  2.         {
  3.             DbContext dbContext = HttpContext.Current.Items["dbContext"] as DbContext;
  4.             if (dbContext == null)
  5.             {
  6.                 dbContext = new CmsDb();
  7.                 HttpContext.Current.Items["dbContext"] = dbContext;
  8.             }
  9.             return dbContext;
  10.         }
复制代码






上一篇:根据UserAgent判断来访者是手机还是电脑
下一篇:Asp.Net IHttpHandler介绍
帖子永久地址: 

架构师_程序员 - 论坛版权1、本主题所有言论和图片纯属会员个人意见,与本论坛立场无关
2、本站所有主题由该帖子作者发表,该帖子作者与架构师_程序员享有帖子相关版权
3、其他单位或个人使用、转载或引用本文时必须同时征得该帖子作者和架构师_程序员的同意
4、帖子作者须承担一切因本文发表而直接或间接导致的民事或刑事法律责任
5、本帖部分内容转载自其它媒体,但并不代表本站赞同其观点和对其真实性负责
6、如本帖侵犯到任何版权问题,请立即告知本站,本站将及时予与删除并致以最深的歉意
7、架构师_程序员管理员和版主有权不事先通知发贴者而删除本文

码农网,只发表在实践过程中,遇到的技术难题,不误导他人。
您需要登录后才可以回帖 登录 | 注册[Register]

本版积分规则

免责声明:
码农网所发布的一切软件、编程资料或者文章仅限用于学习和研究目的;不得将上述内容用于商业或者非法用途,否则,一切后果请用户自负。本站信息来自网络,版权争议与本站无关。您必须在下载后的24个小时之内,从您的电脑中彻底删除上述内容。如果您喜欢该程序,请支持正版软件,购买注册,得到更好的正版服务。

Mail To:help@itsvse.com

QQ|Archiver|手机版|小黑屋|架构师 ( 鲁ICP备14021824号-2 )|网站地图

GMT+8, 2018-9-25 21:16

Powered by Discuz! X3.4

© 2001-2014 Comsenz Inc.

快速回复 返回顶部 返回列表