ASP.NET MVC по умолчанию?

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

Когда я сопоставляю маршруты с парой {controller}/{action}, я передаю роль = "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.

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

Ответы

Ответ 1

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

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

Ответ 2

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

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

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

а затем

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

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

Ответ 3

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

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

Ответ 4

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