HTTPModule IIS7 не может переписать путь к подпрограмме MVC - PullRequest
0 голосов
/ 19 ноября 2010

У меня работает HTTPModule в IIS 7, предоставляющий ряд различных служб перезаписи URL.

Например:

public void Init(HttpApplication context)
{
    ...
    HttpContext.Current.RewritePath(landingPage.NewPath,
                                string.Empty,
                                landingPage.NewQueryString +
                                ((landingPage.NewQueryString == string.Empty) ? "" : "&") +
                                queryString);
    ...
}

У меня есть подпрограмма с собственным пулом приложений, написанным наMVC: http://www.SomeSiteWithURLrewrite.com/SubMVCApplication/

Этот модуль прекрасно работает, за исключением приложений MVC, созданных в качестве вспомогательных приложений.

Когда я делаю http-запрос, который будет переписан: http://www.SomeSiteWithURLrewrite.com/Arbitrary/Path/To/Be/Rewritten

Я получаю сообщение об ошибке HTTP 404.0 - Not Found

Страница ошибки 404 показывает, что произошла ошибкавызов "http://www.SomeSiteWithURLrewrite.com/Arbitrary/Path/To/Be/Rewritten", который был переписан в физический путь" C: {RootDirectory} \ SubMVCApplication \ "с обработчиком" StaticFile ".

Я не уверен, почему трубопровод не распознает"HttpContext.Current.RewritePath "как запрос MVC. Это потому, что приложение MVC находится в своем собственном приложении?

Как я могу вызвать RewritePath (или что-то подобное) и заставить IIS отобразить страницу ASP.Net MVC.в субприложении

Ответы [ 2 ]

2 голосов
/ 23 ноября 2010

Если вы пересекаете границы приложения, вам нужно будет сделать Response.Redirect, который выдает клиентскую команду перенаправления HTTP 301

ReWritePath - это команда только для сервера, которая нуждается в доступе к таблицам маршрутизации и т. Д. Таким образомтолько текущая граница приложения

Нет простого ответа, кроме как создать прокси-страницу в каждом веб-приложении для передачи содержимого, но это будет крайне неэффективно

, например, server.com/a/ x переписанный на server.com/b/x, ваш код должен был бы обнаружить изменение границ приложения, и вместо этого при перенаправлении выполнил бы HTTPRequest для получения содержимого server.com/b/x и передачи этого содержимого обратноклиент?Пути к ресурсам и т. Д. Стали бы большой проблемой, поэтому, вероятно, не очень хорошая идея

0 голосов
/ 03 мая 2012

Я полностью не согласен с ответом TFD . Все зависит от алгоритма, который вы хотите реализовать.

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

преобразование URL: my.site.com/page1/page2/page3/faq.aspx
до: my.site.com/content/faq.aspx?parent=page3/page2/page1

, где content - имя контроллера, а faq - уникальный идентификатор.

Данные для этого могут быть взяты из базы данных или файла карты сайта.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...