Переписывание устаревшего URL с параметрами строки запроса - PullRequest
8 голосов
/ 27 марта 2010

Я просмотрел устаревшие URL-адреса маршрутизации ASP.Net MVC, передающие идентификаторы строки запроса в действия контроллера и несколько других подобных сообщений для устаревшей маршрутизации URL-адресов, но я не могу обойти ошибку "Данные RouteData должны содержит элемент с именем 'controller' с непустым строковым значением. " Поиск в сети не дал мне никаких подсказок, чтобы решить мою проблему.

Я реализовал класс маршрутизации Legacy, описанный в приведенной выше ссылке, и это то, что я определил в таблице маршрутизации:

        routes.Add(
            "Legacy", 
            new LegacyRoute("fooref.aspx", 
            "FooRef", 
            new LegacyRouteHandler())
        );

        routes.MapRoute(
            "FooRef",
            "{controller}/{action}",
            new
            {
                controller = "Home",
                action = "Index",
                foo_id = UrlParameter.Optional,
                bar_id = UrlParameter.Optional
            }
        );

Когда я использую отладчик маршрута Фила Хаака, это указывает, что fooref.aspx имеет совпадение, но когда я выключаю отладчик маршрута, я получаю сообщение об ошибке выше. Если я поменяю порядок операторов, я получу «Ресурс не найден» для /ctprefer.aspx, что имеет смысл - так что, похоже, он находит это в качестве действительного маршрута, если поместить в другой порядок.

Где мне нужно объявить эту отсутствующую ссылку на контроллер?

Изменены ли требования к маршрутизации для ASP.NET MVC 2 RTM?

Ответы [ 2 ]

1 голос
/ 27 апреля 2011

Решением этой проблемы является использование IHttpHandler напрямую, а не MVCHandler. Я разместил код, который работает с MVC 3 в моем блоге: http://www.olsonsoft.com/blogs/stefanolson/post/Handling-Legacy-Urls-in-AspNet-MVC-3.aspx

... Stefan

0 голосов
/ 31 декабря 2010

Возможно, вы захотите взглянуть на модуль перезаписи URL для IIS. Его можно использовать для перевода устаревших URL-адресов в новые URL-адреса MVC, не «загрязняя» ваше приложение устаревшими маршрутами.

Не знаю, подойдет ли оно вашему решению, но стоит выбрать альтернативу.

...