ASP.NET MVC Маршрут по умолчанию? - PullRequest
17 голосов
/ 10 июня 2009

Я создал новый проект ASP.NET MVC и внедрил фильтр авторизации сайта.

Когда я сопоставляю маршруты с парой {controller}/{action}, я передаю по умолчанию роль role = "SomeRole".

Это прекрасно работает, если я прошёл полный URL (http://localhost/somecontroller/someaction) и указал полный маршрут

MapRoute("SomeAction", "somecontroller/someaction",
 new { controller = "SomeController", action = "SomeAction", role = "SomeRole");

Проблема в том, что когда кто-то посещает http://thesiteaddress.com, должен быть маршрут по умолчанию, который вызывает /home/index вместо /, и если я укажу

MapRoute("Default", new { controller="somecontroller",action="action" });

тогда я теряю role="SomeRole" от предыдущего MapRoute.

Как я могу решить эту проблему?

Ответы [ 4 ]

34 голосов
/ 10 июня 2009

Убедитесь, что маршрут Default находится на ВНИЗ в указанной таблице маршрутов. Порядок имеет значение, когда речь идет о таблицах маршрутизации ASP.NET MVC.

Правильный порядок - это ваш «самый конкретный» маршрут к наименее конкретному маршруту.

17 голосов
/ 24 июня 2009

На самом деле, Джордж прав . MVC Routing соблюдайте порядок маршрутизации. Ваш последний маршрут должен быть как можно более общим, а ваш предыдущий маршрут должен быть как можно более конкретным.

В вашем случае оба являются общими. Вы должны

MapRoute("SomeAction", "Post/{action}", new {controller = "Post", role = "User");

, а затем

MapRoute("Default", new {controller="Home", action="Index", role = "Anonymous"});

Итак, вы даете специфичность обоим маршрутам.

12 голосов
/ 10 июня 2009

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

С помощью этого инструмента вы можете увидеть, как приложение MVC анализирует URL-адрес и сопоставляет его с RouteTable.

2 голосов
/ 10 июня 2009

Если вы не предоставите имя маршрута или действие определено с помощью HTTP-запроса, оно будет выглядеть в порядке, в котором они были добавлены. В первый раз, когда он находит тот, который соответствует, он останавливается. Так что, вероятно, происходит то, что он соответствует предыдущему тому, который вы добавили.

...