6

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

我尝试使用:

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

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

<modules runAllManagedModulesForAllRequests="true">

这对我来说似乎很可疑,实际上禁用了模块上的前置条件。但是将其更改为 false 会以完全不同的方式和不同的异常中断应用程序(SessionStateTempDataProvider 需要启用 SessionState)。

当请求静态内容文件时,任何人都可以帮助我如何强制 IIS7 排除我的 HttpModule 吗?

4

2 回答 2

3

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

我的其他问题之一提供了答案:

感谢彼得提供了正确的答案。

于 2009-09-09T07:03:49.527 回答
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事件的顺序,请参阅此页面。)

编辑:此外,它出现在 ASP.NET 开发服务器中(尽管我知道您在问题中说 IIS7),即使对于静态文件,您的 HttpModule 仍将运行。

于 2009-07-21T03:39:18.760 回答