iis-7 - 为什么当 System.Web.Routing 处于事件状态时,反向代理重写规则停止工作?

标签 iis-7 url-rewriting asp.net-mvc-routing

将其归结为最简单的规则:

      <rule name="Reverse Proxy" stopProcessing="true">
          <match url="^external/(.*)" />
          <action type="Rewrite" url="http://some-site/{R:1}" />
      </rule>

(“启用代理”在服务器级别的 ARR 服务器代理设置中选中)。

上面的重写规则在一个非常简单的测试应用程序中运行良好,其中 web.config 包含该部分,它在 Web 表单应用程序中运行良好,但如果我将相同的规则放入 MVC3 应用程序(在同一台机器上,所以相同的配置对于更高级别的 IIS)它永远不会有任何影响;请求流过。

如果它只是重​​写(而不是反向代理),它可以正常工作,例如,
          <rule name="rewrite to internal" stopProcessing="true">
              <match url="^internal/(.*)" />
              <action type="Rewrite" url="different-internal/{R:1}" />
          </rule>

……没事。

如果我添加,我可以让反向代理规则工作
        routes.IgnoreRoute("external/{*pathInfo}");

在 Global.asax.cs 类中,这样我对 external/* 的请求就不会命中默认 Controller ,但我不明白为什么。我认为 URL 重写模块在路由之前启动(参见 http://learn.iis.net/page.aspx/496/iis-url-rewriting-and-aspnet-routing/ ),所以我希望它们之间不会发生冲突。

路由模块是否在 URL 重写模块中添加了“虚拟”重写规则,从而覆盖了我声明的重写规则?

最佳答案

我遇到了同样的问题,我花了一整天才找到 the solution.

  • 找到:Web.config 文件中的 ServoceModel 标记并添加 serviceHostingEnvironment 代码,如下所示:
          <system.serviceModel>
            <serviceHostingEnvironment aspNetCompatibilityEnabled="true" multipleSiteBindingsEnabled="true" />
          </system.serviceModel>
    

  • 这将允许将路由传递给 IIS 来处理它。

    还有一个提示,我建议任何在 MVC 项目中遇到路由问题的人安装 Remote Debugger通过 NuGet。这将告诉您何时激活哪些路线。

    关于iis-7 - 为什么当 System.Web.Routing 处于事件状态时,反向代理重写规则停止工作?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9841241/

    相关文章:

    url-rewriting - Sling 映射是否可以限制为带有主机 header 的请求

    asp.net-mvc - 如何在 URL 中没有 Controller 名称的情况下获取单个 Controller 中操作方法的不同 URL?

    iis-7 - 如何以内置管理员身份运行 IIS 7 应用程序池?

    iis-7 - 如何在 Windows 2003 中从 IIS 6.0 升级到 IIS 7.0

    redirect - 绝对 url 的基本 url 重定向

    php - Laravel .htaccess 重写规则转换为 IIS

    sql-server - 使用 ASP.Net 网站和 NHibernate 进行双跳

    asp.net - 蓝屏死机只能在IE下运行

    c# - HTTP 错误 403.14 - 禁止访问 - 带 IIS Express 的 MVC 4

    asp.net - ASP.NET MVC 2区域和路由优先级