【发布时间】:2011-03-25 22:08:54
【问题描述】:
这是一个很难表述的问题。我想知道 HttpContext.Current 是如何为每个请求分配一个唯一实例的,因为它是一个静态对象?
谢谢!
【问题讨论】:
标签: asp.net httpcontext
这是一个很难表述的问题。我想知道 HttpContext.Current 是如何为每个请求分配一个唯一实例的,因为它是一个静态对象?
谢谢!
【问题讨论】:
标签: asp.net httpcontext
Current不是静态变量,它的静态属性,get属性只不过是一个返回当前Context的静态方法。
ASP.NET 使用当前线程存储一些信息,您始终可以获取本地线程存储来存储仅在当前线程中是静态的信息,并且只能通过当前线程中的任何方法访问。
因此 ASP.NET 将一些本地信息存储在 http 上下文执行请求的应用程序的线程中,并且从任何地方调用 Current 将获取本地线程数据并获取所需的信息。
您还可以查看[ThreadStatic] 属性,它的作用方式几乎相似。
更新
从 ASP.NET 4.5 及更高版本开始,Current HttpContext 通过 CallContext 而不是 [ThreadStatic] 传递,因此上下文在单个逻辑上下文而不是当前线程中的所有异步调用中仍然可用,因为每个异步调用都可能结束在不同的线程上。
【讨论】:
您应该阅读这篇博文:
http://odetocode.com/Articles/112.aspx
您应该对以下开头的部分感兴趣。它很长,否则我会引用更多:
我们中间的好奇者会想知道 HttpContext.Current 如何找到 当前请求的上下文。
【讨论】: