目前我已经runAllManagedModulesForAllRequests="true"
设置了属性,所以我的模块正在为所有请求运行。我想这包括SessionStateModule
.
当尝试在PostAcquireRequestState
我的一个自定义模块中的事件处理程序中访问会话对象时,HttpContext.Current.Session
当为空时HttpApplication.Context.CurrentHandler
为空(例如:对于 JS/CSS 文件),当处理程序为空时它不为空MvcHandler
(因为它是我猜是托管处理程序)。
我一直在查看SessionStateModule
ILSpy 中的代码,但找不到为该请求决定跳过 Session 的地方。
我一直在寻找,%windir%\Microsoft.NET\Framework64\v4.0.30319\Config\machine.config
没有提及SessionStateModule
,Web.config
在那个文件夹中我发现:
<add name="Session" type="System.Web.SessionState.SessionStateModule" />
所以它没有使用任何先决条件,如managedHandler
.
有谁知道为什么SessionStateModule
即使runAllManagedModulesForAllRequests
设置了属性也会跳过对非托管资源的请求?
干杯。