IIS7 HttpModule和ISAPI Filter执行顺序

时间:2011-03-16 19:03:04

标签: asp.net iis-7 httpmodule isapi

我有一个使用ISAPI Rewrite的网站以及一个自定义的HttpModule,它们都进行了网址重定向和重写。

在IIS 6中,一切正常:首先运行ISAPI Rewrite过滤器,然后运行HttpModule。在IIS 7(集成模式)中,顺序现在是相反的,这会产生问题。

我的问题,特别是,HttpModule有一个条件,它将使用context.RewritePath发出一个Url重写。如果没有提供文档,它会向路径显式添加“index.aspx”,因此/test/的请求会被重写为/test/index.aspx

在重写路径之后的某个时刻,执行ISAPI重写过滤器。我们有一个与模块相反的规则:/test/index.aspx的请求被301重定向到/test/。因此,我们有一个无限循环。

如何在IIS 7中确定HttpModules和ISAPI过滤器的执行顺序?订单可以更改吗?我找到this question,但它并没有真正帮助。我不是IIS 7的主人,但我确实在某种程度上理解模块和ISAPI过滤器“一起”运行。不幸的是,他们的管理方式也不同,我无法弄清楚如何强迫一个人跑到另一个人面前。救命啊!

注意:我们假设我无法更改现有代码。它在IIS 6中有效。我只想知道是否有办法使其在IIS 7集成模式下工作。

2 个答案:

答案 0 :(得分:3)

我也有一个类似的问题,我认为ISAPI重写首先被执行,但显然这不是IIS7的工作方式

我发现这个帖子说明了

  

在集成模式下,本机模块,isapi和.net的事件被混合在一起

     

e.g。如果它是BeginRequest,那么本机模块是第一个来的,然后是isapi,然后是.net代码。之后,AuthenticateRequest将重复所有内容...

     

前段时间它曾经是这样的:isapi已经处理了所有事件,并且仅在之后调用.net。这可能就是你所假设的。

http://www.helicontech.com/forum/18447-ISAPI_RW3_Lite_on_IIS_7x_Integrated_mode.html

希望它有所帮助

答案 1 :(得分:0)

查看以下解释IIS 7 pipeline的文章。管道的顺序无法更改。不确定这是否是一个选项,但您可能会使用IIS URL Rewrite module替换ISAPI重写。这可能允许您的应用程序以集成管道模式运行,否则,您可能需要将应用程序池切换为以经典模式运行。