HttpContext.Current如何工作?

Mic*_*cah 16 asp.net httpcontext

这是一个难以制定的问题.我想知道HttpContext.Current如何为每个请求分配一个唯一的实例,因为它是一个静态对象?

谢谢!

Aka*_*ava 19

Current不是静态变量,它的静态属性和get属性只是一个返回当前Context的静态方法.

ASP.NET使用当前线程存储一些信息,您总是可以获得本地线程存储来存储仅在当前线程中是静态的信息,并且只能通过当前线程中的任何方法访问.

因此,ASP.NET将一些本地信息存储在http上下文执行所请求的应用程序的线程中,并且从任何地方调用Current将获取本地线程数据并获取所需信息.

您还可以查看[ThreadStatic]几乎以类似方式执行操作的属性.

更新

从ASP.NET 4.5及之后,Current HttpContext被传递CallContext而不是[ThreadStatic],因此在单个逻辑上下文而不是当前线程中通过异步调用保持上下文可用,因为每个异步调用可能最终在不同的线程上.


Kel*_*sey 10

你应该阅读这篇博文:

http://odetocode.com/Articles/112.aspx

您应该对以下内容开头的部分感兴趣.这很长,否则我会引用更多:

我们之间的好奇心会想知道HttpContext.Current如何找到当前请求的上下文.