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-запросу, оно будет выглядеть в порядке от заказа, который они добавили. При первом совпадении он останавливается. Так что, вероятно, это совпадает с предыдущим, чем вы добавили.