2009-07-20 56 views
6

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

我试着使用:

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

,但无济于事。它仍然在每个请求上运行,而不管其扩展名或MIME类型。我还应该补充说,有一个设置

<modules runAllManagedModulesForAllRequests="true"> 

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

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

+0

顺便说一句,你肯定这是IIS7,而不是ASP.NET开发服务器,对不对?只是双重检查。 – 2009-07-21 06:43:37

+0

我100%肯定... – 2009-07-21 15:20:20

回答

3

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

答案在one of my other questions提供:

感谢彼得前提是正确地工作的答案。

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开发服务器出现(虽然我知道你在提问时说IIS7),您的HttpModule仍将即使运行静态文件。