目前我已经runAllManagedModulesForAllRequests="true"设置了属性,所以我的模块正在为所有请求运行。我想这包括SessionStateModule.
当尝试在PostAcquireRequestState我的一个自定义模块中的事件处理程序中访问会话对象时,HttpContext.Current.Session当为空时HttpApplication.Context.CurrentHandler为空(例如:对于 JS/CSS 文件),当处理程序为空时它不为空MvcHandler(因为它是我猜是托管处理程序)。
我一直在查看SessionStateModuleILSpy 中的代码,但找不到为该请求决定跳过 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设置了属性也会跳过对非托管资源的请求?
干杯。