【问题标题】:IIS7 HttpModule and ISAPI Filter execution orderIIS7 HttpModule 和 ISAPI Filter 执行顺序
【发布时间】:2011-07-16 20:50:22
【问题描述】:

我有一个使用ISAPI Rewrite 的站点以及一个自定义的 HttpModule,它们都执行 Url 重定向和重写。

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

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

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

IIS 7 中HttpModules 和ISAPI Filters 的执行顺序是如何确定的? 可以更改顺序吗?我找到了this question,但它并没有真正帮助。我不是 IIS 7 的大师,但我确实在一定程度上理解模块和 ISAPI 过滤器“一起”运行。不幸的是,他们的管理方式仍然不同,我不知道如何强迫一个人先于另一个人跑。救命!

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

【问题讨论】:

    标签: asp.net iis-7 httpmodule isapi


    【解决方案1】:

    我也遇到过类似的问题,我认为 ISAPI 重写会首先执行,但显然这不是 IIS7 的工作方式

    我发现这个帖子说

    在集成模式下,原生模块、isapi 和 .net 的事件被称为混合在一起

    例如如果是 BeginRequest,那么本机模块首先出现,然后是 isapi,然后是 .net 代码。之后,一切都将重复 AuthenticateRequest...

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

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

    希望对你有帮助

    【讨论】:

      【解决方案2】:

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

      【讨论】:

        猜你喜欢
        • 2010-10-01
        • 2011-01-29
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2011-10-27
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多