这是一个难以制定的问题。我想知道HttpContext.Current如何为每个请求分配一个唯一的实例,因为它是一个静态对象?
谢谢!
答案 0 :(得分:19)
Current不是静态变量,它的静态属性和get属性只不过是一个返回当前Context的静态方法。
ASP.NET使用当前线程存储一些信息,您始终可以获取本地线程存储来存储仅在当前线程中是静态的信息,并且只能通过当前线程中的任何方法访问。
因此,ASP.NET将一些本地信息存储在http上下文执行所请求的应用程序的线程中,并且从任何地方调用Current将获取本地线程数据并获取所需信息。
您还可以查看以类似方式执行操作的[ThreadStatic]
属性。
<强>更新强>
从ASP.NET 4.5及之后,当前HttpContext
通过CallContext
而不是[ThreadStatic]
传递,因此通过异步调用在单个逻辑上下文而不是当前线程中保持上下文可用每个异步调用可能会在不同的线程上结束。
答案 1 :(得分:10)
你应该阅读这篇博文:
http://odetocode.com/Articles/112.aspx
您应该对以下内容开头的部分感兴趣。这很长,否则我会更多地引用它:
我们中间好奇的人会怀疑 HttpContext.Current如何找到 当前请求的上下文。