Почему в этом случае маршрут по умолчанию не работает с использованием Html.ActionLink? - PullRequest
2 голосов
/ 06 января 2011

У меня довольно специфическая проблема с маршрутизацией.

Возвращаясь к маршрутизации, не беспокоясь о ее конфигурации в течение года, я использую маршрут по умолчанию и игнорирую маршрут для ресурсов:

routes.IgnoreRoute("{resource}.axd/{*pathInfo}");

routes.MapRoute(
        "Default",
        // Route name
        "{controller}/{action}/{id}",

        // URL with parameters
        new
        {
            controller = "Home",
            action = "Index",
            id = UrlParameter.Optional
        });

У меня есть RulesController с действием для Index и Lorem и Index.aspx, Lorem.aspx в каталоге Views> Rules.

У меня есть ActionLink, нацеленный наПравила / Индекс на странице maseter:

<li><div><%: Html.ActionLink("linkText", "Index", "Rules")%></div></li>

Ссылка отображается как http://localhost:12345/Rules/, и я получаю 404.

Когда я набираю Index в URL, приложение перенаправляетэто к действию.

Когда я изменяю действие маршрута по умолчанию с "Index" на "Lorem", ссылка действия отображается как http://localhost:12345/Rules/Index с добавлением Index, так как его больше нет на маршруте по умолчаниюи приложение правильно перенаправляет на действие Index.

Я использовал Phil Haack's Routing Debugger , но ввод URL-адреса http://localhost:12345/Rules/ также вызывает использование 404.

Я думаю, что я покрыл все ошибки новичка, релевантныеt ТАК вопросы и основные RTFM.

Я предполагаю, что «Правила» не являются каким-либо зарезервированным словом в маршрутизации.Кроме обновления маршрутов и их отладки, что я могу посмотреть?

1 Ответ

2 голосов
/ 06 января 2011

Убедитесь, что в том же каталоге, что и ваш веб-сайт, нет папки «Правила». В конфигурации по умолчанию маршруты ASP.NET MVC будут учитывать физические пути перед определениями маршрутов. Если определен маршрут, который соответствует пути к физической папке на веб-сайте, механизм маршрутизации будет полностью обойден.

Вы можете отключить маршрутизацию к физическим путям, изменив свойство RouteTable.Routes.RouteExistingFiles на false, но если вы сделаете это, и у вашего приложения будут пути к физическим ресурсам (таким как изображения, сценарии, таблицы стилей и т. Д.), Вам потребуется приспособить для этих путей с соответствующими определениями IgnoreRoute (). Например: RouteTable.Routes.IgnoreRoute("content/{*pathInfo}");.

...