【发布时间】:2013-11-01 12:40:55
【问题描述】:
目前我设置了runAllManagedModulesForAllRequests="true" 属性,因此我的模块正在针对所有请求运行。我猜这包括SessionStateModule。
在我的一个自定义模块中尝试访问 PostAcquireRequestState 事件处理程序中的会话对象时,HttpContext.Current.Session 为 null 而 HttpApplication.Context.CurrentHandler 为空(例如:对于 JS/CSS 文件),并且它当处理程序为 MvcHandler 时不为空(因为我猜它是托管处理程序)。
我一直在查看 ILSpy 中的 SessionStateModule 代码,但我找不到为该请求决定跳过会话的位置。
我一直在查看%windir%\Microsoft.NET\Framework64\v4.0.30319\Config\machine.config,但没有提到SessionStateModule,我在该文件夹中的Web.config 中找到了:
<add name="Session" type="System.Web.SessionState.SessionStateModule" />
所以它没有使用像managedHandler这样的任何前置条件。
有人知道为什么SessionStateModule 会跳过对非托管资源的请求,即使设置了属性runAllManagedModulesForAllRequests?
干杯。
【问题讨论】:
标签: asp.net iis-7 iis-7.5 httpmodule integrated-pipeline-mode