Причина состоит в том, что оба маршрута имеют одинаковое количество параметров и не имеют ограничений, поэтому обработчик маршрута не может различить их для входящего запроса - он будет идти только с первым соответствием (т. Е. В зависимости от того, что было добавлено в таблицу маршрутов). первый).
Если вы правильно различаете маршруты, это сработает. Например, вы можете попробовать удалить необязательный параметр «id» из маршрута «По умолчанию» и сделать обязательной часть «страницы» маршрута «Legos» (так как кажется, что она необходима для работы конечной точки, это лучше всего все равно тренируйтесь):
routes.MapRoute(
"Legos",
"{controller}/{action}/{page}",
new { controller = "Legos", action = "Lego", page = 1 });
routes.MapRoute(
"Default", // Route name
"{controller}/{action}", // URL with parameters
new { controller = "Home", action = "Index" } // Parameter defaults
);
Это будет означать, что URL с двумя параметрами (т. Е. Home / Index) не будет соответствовать маршруту "Legos", так как в нем отсутствует обязательный параметр "page" - тогда он будет тестировать маршрут "Default", который будет успешно, так как «Home / Index» соответствует ожидаемому формату «{что-нибудь} / {что-нибудь}».
Другой вариант - добавить ограничение маршрута к одному из маршрутов - например, вы можете сделать так, чтобы «страница» принимала только числа, поэтому, если входящий запрос выглядит как {что угодно} / {что угодно} / {числовое}, то это будет соответствовать маршруту "Legos", но если он будет не числовым, он не будет соответствовать ограничению и вместо этого попадет на маршрут по умолчанию:
routes.MapRoute(
"Legos",
url: "{controller}/{action}/{page}",
defaults: new { controller = "Legos", action = "Lego" },
constraints: new { page = @"([0-9]+)" } ); // constrain to "one or more numbers" - constraints are simply regular expressions
routes.MapRoute(
"Default", // Route name
"{controller}/{action}/{id}", // URL with parameters
new { controller = "Home", action = "Index", id = UrlParameter.Optional } // Parameter defaults
);
Конечно, "проблема" с этим конкретным решением была бы, если бы у вас был числовой идентификатор (который, как ни странно, большинство), который вы хотели бы использовать для маршрута "по умолчанию", он в конечном итоге был бы пойман Маршрут "Легос" ...