排除HttpModule在IIS7上运行静态内容

时间:2009-07-20 21:56:45

标签: asp.net-mvc iis-7 httpmodule

我的身份验证HttpModule出了问题。问题是它显然是针对我在Web服务器(IIS7)上获得的每个请求运行的。因为它也使用Session变量,所以它无法在CSS,JS文件和类似文件上正常工作。

我试图使用:

<add name="AuthModuleName" type="..." preCondition="managedHandler" />

但无济于事。它仍然可以在每个请求上运行,无论其扩展名或mime类型如何。我还要补充一下,有一个设置

<modules runAllManagedModulesForAllRequests="true">

这对我来说似乎很可疑,并且实际上禁用了模块上的preConditions。但是将其更改为false会以完全不同的方式破坏应用程序并使用不同的异常(SessionStateTempDataProvider需要启用SessionState)。

在请求静态内容文件时,有人可以帮助我强制IIS7排除我的HttpModule吗?

2 个答案:

答案 0 :(得分:3)

runAllManagedModulesForAllRequests属性已将设置为 false ,以按您希望的方式实际配置任何模块。您还必须根据需要正确地重新配置Session和其他,但主要是处理请求的处理程序管道执行顺序。

答案在one of my other questions中提供:

感谢Peter提供了正确的答案。

答案 1 :(得分:1)

我不知道IIS7的设置,但你可以这样做。

会话对象仅适用于非静态内容:

void yourEventHandler(object sender, EventArgs e) {
    HttpApplication app = (HttpApplication)sender;
    if (app.Context.Session == null) {
        return;
    }
    // then your code here...
}

这将确保您的代码不会运行CSS,JS等文件。但请记住,会话对象在PostAcquireRequestState事件之前也不会就绪。 (有关HttpApplication事件的顺序,请参阅this page。)

编辑:此外,它出现在ASP.NET Development Server中(虽然我知道你在问题中说过IIS7),你的HttpModule仍然可以运行静态文件。