我的身份验证HttpModule出了问题。问题是它显然是针对我在Web服务器(IIS7)上获得的每个请求运行的。因为它也使用Session变量,所以它无法在CSS,JS文件和类似文件上正常工作。
我试图使用:
<add name="AuthModuleName" type="..." preCondition="managedHandler" />
但无济于事。它仍然可以在每个请求上运行,无论其扩展名或mime类型如何。我还要补充一下,有一个设置
<modules runAllManagedModulesForAllRequests="true">
这对我来说似乎很可疑,并且实际上禁用了模块上的preConditions。但是将其更改为false会以完全不同的方式破坏应用程序并使用不同的异常(SessionStateTempDataProvider需要启用SessionState)。
在请求静态内容文件时,有人可以帮助我强制IIS7排除我的HttpModule吗?
答案 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仍然可以运行静态文件。