Всем привет, есть такой вот роут
public static void RegisterRoutes(RouteCollection routes)
{
routes.IgnoreRoute("{resource}.axd/{*pathInfo}");
routes.Add("", new Route("{action}/{controller}", new MvcRouteHandler()));
routes.MapRoute(
name: "",
url: "{controller}/{action}",
defaults: new { controller = "Home", action = "Index" }
);
}
в первом добавлении идет {action}/{controller}, а во втором наоборот {controller}/{action} вопрос в том, что при отправке запроса такого типа http://localhost:3373/home/index?Name=Vasya&Message=Gleb выдается ошибка, так как почему-то приложение использует роут №1, добавление во второй роутер слова Default дела не меняет, зато если удалить первый роут, тогда все работает отлично. Почему так и по по какому принципу он решает какой роут будет дефолтным если не указываются имена роутов ?
Ответ
Маршруты обрабатываются строго в порядке их добавления. Как только будет найден подходящий маршрут, он используется и дальнейший поиск подходящего маршрута не выполняется.
Адрес http://localhost:3373/home/index содержит две секции, поэтому подходит под первый шаблон.
Вы пишете:
добавление во второй роутер слова Default дела не меняет
Вы видимо вот об этой строчке:
defaults: new { controller = "Home", action = "Index" }
Здесь слово defaults не означает что этот маршрут надо использовать как дефолтный, оно указывает какие значения подставить в переменные в шаблоне маршрута, если они вдруг пусты. То есть если вы используете только второй маршрут, то адрес
/ будет интерпретироваться как /Home/Index
/Home тоже будет интерпретироваться как /Home/Index
То есть, если в маршруте нет какой-то секции, будет использовано указанное вами дефолтное значение для этой секции.
В вашем случае адрес home/index подходит уже под первый ваш маршрут, поэтому до анализа второго маршрута дело даже не доходит.
Комментариев нет:
Отправить комментарий