这是一个比较难以表述的问题。我想知道每个请求如何为HttpContext.Current分配唯一的实例,而它又是一个静态对象?
谢谢!
这是一个比较难以表述的问题。我想知道每个请求如何为HttpContext.Current分配唯一的实例,而它又是一个静态对象?
谢谢!
Current 不是一个静态变量,而是它的静态属性。Get 属性仅仅是一个静态方法,用于返回当前上下文。
ASP.NET 会将一些信息存储在当前线程中,您可以始终获取一个本地线程存储器来存储信息,这种信息仅在当前线程中是静态的,并且只能由当前线程中的任何方法访问。
所以 ASP.NET 会将一些本地信息存储在线程中,在该线程中执行 Http 上下文请求的应用程序,并且无论从哪里调用 Current 都会获取本地线程数据并获取所需信息。
您还可以查看 [ThreadStatic] 特性,它几乎以类似的方式处理事情。
更新
从 ASP.NET 4.5 开始,Current HttpContext 通过 CallContext 传递,而不是通过 [ThreadStatic],因此上下文在单个逻辑上下文中的异步调用中保持可用,而不是在当前线程中,因为每个异步调用可能会在不同的线程上结束。
您应该阅读这篇博客文章:
http://odetocode.com/Articles/112.aspx
以下内容应该对您感兴趣。如果不是很长,我会引述更多:
好奇的人们会想知道HttpContext.Current如何找到当前请求的上下文。