Почему перестает работать правило перезаписи обратного прокси, когда активен System.Web.Routing? - PullRequest
3 голосов
/ 23 марта 2012

Сведение этого к самому простому из возможных правил:

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

(«Включить прокси» отмечен в настройках прокси-сервера ARR на уровне сервера).

Приведенное выше правило перезаписиотлично работает в очень простом тестовом приложении с web.config, содержащим раздел, он отлично работает в приложении веб-форм, но если я добавлю то же правило в приложение 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, чтобы мой запрос на внешний / * не попал в контроллер по умолчанию, но я нене понимаю почему.Я думаю, что модуль перезаписи URL начинает работать до маршрутизации (см. http://learn.iis.net/page.aspx/496/iis-url-rewriting-and-aspnet-routing/), поэтому я ожидаю, что между ними не будет конфликта.

Добавляет ли модуль маршрутизации «виртуальную» перезаписьправила для модуля перезаписи URL, которые переопределяют мои объявленные правила перезаписи?

1 Ответ

4 голосов
/ 06 августа 2012

У меня была точно такая же проблема, и мне потребовался целый день, чтобы найти решение.

  1. Найти: тег ServoceModel в вашем файле Web.configи добавьте код serviceHostingEnvironment, как показано ниже:

          <system.serviceModel>
            <serviceHostingEnvironment aspNetCompatibilityEnabled="true" multipleSiteBindingsEnabled="true" />
          </system.serviceModel>
    

Это позволит передавать маршруты в IIS для его обработки.

Еще один совет, который я рекомендуюлюбой, у кого есть проблемы с маршрутизацией в их проектах MVC для установки Remote Debugger через NuGet.Это скажет вам, какие маршруты активируются, когда.

...