1

目前我已经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没有提及SessionStateModuleWeb.config在那个文件夹中我发现:

<add name="Session" type="System.Web.SessionState.SessionStateModule" />

所以它没有使用任何先决条件,如managedHandler.

有谁知道为什么SessionStateModule即使runAllManagedModulesForAllRequests设置了属性也会跳过对非托管资源的请求?

干杯。

4

1 回答 1

3

似乎 IIS 使用托管处理程序前提条件加载默认模块以确保向后兼容性。 http://forums.iis.net/post/1904024.aspx

于 2013-11-02T12:41:27.567 回答