Может ли ASP.NET MVC маршрутизация и классическая домашняя страница ASP (VBScript, а не веб-формы) хорошо играть вместе? - PullRequest
3 голосов
/ 12 октября 2010

У нас есть классическая страница VBScript "default.asp" в корне нашего сайта.(Это тяжелая, унаследованная страница, и конвертировать ее сейчас не вариант.) У нас также есть новое приложение ASP.NET MVC 2, которое мы хотим разместить на том же сайте.Все на самом деле прекрасно работает вместе!За исключением одного: запросы к корню сайта (например, /) принимаются маршрутизацией MVC (которая затем хочет отобразить действие Index HomeController) вместо того, чтобы позволить странице default.asp принять запрос!

Вот что я хотел бы:http://www.example.com/ <- должен выполнять классическую страницу default.asp, а не / Home / Index! </p>

Я не могу понять, как не выполнить HomeController.Index().Если я удаляю HomeController, я получаю ошибку.Если я пытаюсь IgnoreRoute (""), я получаю ошибку.Я даже изменил приоритет / порядок «документа по умолчанию» в IIS для этого сайта, чтобы он рассматривал «default.asp» как предпочтительный документ.Я даже удалил фиктивную страницу MVC «default.aspx» из корня, и все же маршрутизация MVC «крадет» запросы для корня сайта.

Временное решение для меня - иметьHomeController.Index перенаправляет пользователя обратно на «default.asp».Это работает, но потом это выглядит некрасиво и видно в адресной строке,http://www.example.com/default.asp <- не то, что я хочу показать. </p>

Какие-либо предложения / ответы о том, как заставить их обоих сосуществовать?Возможно, что-то, что я могу добавить в web.config, чтобы сделать это исключение для домашней страницы?Спасибо!

ОБНОВЛЕНИЕ

Я прошу прощения за задержку с возвращением к этому, но это на некоторое время отошло на второй план, и я, честно говоря, почти забыл об этом;однако мне удалось заставить это работать!Я хотел бы отдать должное как Крису Марисику, так и Чансу, так как в совокупности они помогли мне разобраться в этом.

Проблема заключалась в том, что, конечно же, кажется, что был маршрут по умолчанию (как Шанс предложил в комментарии) который ловил эти запросы к корню сайта.

Итак, изменив это, а также добавив routes.IgnoreRoute(""); (пустую строку) в качестве первого правила в моем списке маршрутизации, теперь это работает!

Спасибо всем за помощь!

Ответы [ 6 ]

3 голосов
/ 12 октября 2010

Возможно, это не то, что вы ищете, а попытка чего-то вроде классического компилятора ASP и добавления его в свой домашний контроллер

http://aspclassiccompiler.codeplex.com/

С уважением

Иэн

2 голосов
/ 12 октября 2010

Вы хотите добавить домашний маршрут в список игнорируемых маршрутов.

Что-то вроде

routes.IgnoreRoute("/");

или

routes.IgnoreRoute("/default.asp");

1 голос
/ 12 октября 2010

Я не уверен в этом, но вы сможете добавить default.asp в список файлов по умолчанию (iis).Оттуда просто убедитесь, что у всех ваших маршрутов есть префикс (то есть: "что-то / {id}")

0 голосов
/ 19 октября 2010

Я только что занимался этой проблемой в нашей внутренней сети.

Предполагая, что routes.RouteExistingFiles = false; Основная проблема заключается в том, что MVC примет базовый корень как действительный, поэтому IIS не будет пытаться использовать default.asp, поэтому вам нужно как-то попытаться это исправить. Мои предложения:

Удалить индексный маршрут на вашем контроллере

Не только маршрут индекса, но и действие по умолчанию, указывающее на индекс. Если MVC не совпадает с корнем, IIS может попробовать его значения по умолчанию

Перенаправление

Вы можете использовать метод действия Index, чтобы задать RedirectResult для default.asp. Это дополнительный обход, но он также означает, что если / когда вы обновляете эту часть приложения, вы просто заменяете метод индекса.

Перезапись URL

Это мое предпочтительное решение, используйте модуль IIS URL Rewrite , он достаточно мощный и дает вам несколько вариантов. Вы можете получить его для отправки перенаправления обратно в браузер по определенному маршруту. Более интересно то, что вы можете переписать URL, чтобы добавить default.asp. Это означает, что MVC видит URL, который включает файл, но не должен отправлять браузеру перенаправление.

0 голосов
/ 12 октября 2010

I думаю, игнорирование маршрута должно работать, хотя такое поведение может привести к непредвиденным последствиям.

Ответ сумасшедшего разговора: переместите страницу куда-нибудь, заставьте любое действие жить при повороте "~ /" и сделайте WebRequest на этой странице, а затем отправьте это как контент в браузер.

0 голосов
/ 12 октября 2010

самый простой способ - использовать поддомен. у меня была похожая проблема, мое решение состояло в том, чтобы изменить asp-страницы так, чтобы они отображали xml в качестве выходных данных, и экран очищал выходные данные из приложения mvc.

...