|
1
1
基本上,httpContext有一个名为current的静态属性getter。在该属性中,getter是确定要返回的正确httpContext对象的代码。**之后,您将使用实例方法。您的代码段等价于:
它的部分功能并不是真正的魔法-ASP.NET运行时 集合 httpContext.current用于对httpContext的新实例的每个请求。该setter将实例存储在线程静态存储中。然后getter将当前线程的实例从该存储中拉出。 需要注意的关键是,静态属性或方法不仅仅是全局字段,它还可以使用当前线程之类的东西来更改它执行的操作或返回的内容。 **实际上,httpcontext.current委托给contextbase,contextbase委托给callcontext,callcontext最终在线程上使用方法,但其概念是相同的。 ***实际上,运行时在处理请求期间的线程切换时做了更多的工作。 |
|
|
2
1
好吧,它包装了底层的请求和管道对象;静态对象在回发(跨所有请求)中保留了自己,这是我必须学习的一个痛苦的课程…但是无论如何,对象不会被保留,但是公开底层服务和管道的静态对象可以正常工作。 我的意思是,httpContext.current可能没有得到保留,因为它实际上只是在.NET框架中公开可用的服务。这些服务对于请求/用户可能是唯一的,因为由被访问的服务来决定(会话具有内置于服务的内容,使其对用户是唯一的)。 小精灵。 |
|
|
3
0
current是线程特定的,因此看起来很不稳定(可以把它想象成线程上的psuedo扩展方法),session是与应用程序(或应用程序线程)关联的静态对象。在短上下文中,current将使当前线程相互关联。 |