2010-02-02 9 views
0

我有一个HttpModule,它挂接到IIS6上的EndRequest事件并注册了通配符处理程序,只要请求在.aspx页面上结束,就可以正常工作,但不会该网址缺失(404)。EndRequest在资源丢失时未在IIS上触发

我想这是因为staticfilehandler结束了请求,但有没有解决这个问题的好办法?

我已经尝试过在IIS7(管道模式)相同的解决方案,并且它工作正常。

回答

0

我想尝试的第一件事是告诉IIS不要验证文件是否存在,这将允许请求传递给HttpModule。您可以为任何特定的文件映射执行此操作,包括通配符。

如果上述不是一个选项,更坏的情况下,您可以在web.config中为404错误添加一个默认处理程序,这样如果HttpModule无法捕捉事件,您仍然有机会'做一点事'。根据您在EndRequest事件中尝试完成的内容,您可能仍然可以使用该解决方法。

<customErrors defaultRedirect="ErrorPage.aspx" mode="On"> 
    <error statusCode="404" redirect="filenotfound.aspx" /> 
</customErrors> 
+0

正如我在问题中所写的,通配符被定义但没有任何区别,EndRequest仍然没有被触发。自定义错误不是解决这个问题的方法,因为它正在执行重定向而不是重写。 – bang 2010-02-09 11:05:35

+0

您是否尝试在IIS管理中取消选中“验证文件是否存在”?这是更重要的建议? – 2010-02-09 13:54:20

+0

是的,触发了BeginRequest(= aspx isapi),但是如果没有处理程序被分配,请求将被引导到staticfilehandler,导致EndRequest不被触发。这是IIS6中的行为。在IIS7中,结果如预期(触发了BeginRequest和EndRequest)。 – bang 2010-02-09 19:45:06