Весь приведенный ниже код относится к первому определению маршрута.
Второе определение маршрута должно остаться без изменений.
Ваш маршрут неверен
Взгляните на первое определение маршрута:
routes.MapRouteLowerCase(
"Cars", // Route name
"Cars/{id}", // URL with parameters
new { controller = "Cars", action = "Details", id = URLParameter.Optional}
);
И когда вы получаете доступ к Cars/New
, этот первый маршрут получает доступ, потому что все параметры легко применяются как:
- контроллер =
"Cars"
- действие =
"Details"
- id =
"New"
Если вы хотите, чтобы первое определение маршрута охватывало только определенные идентификаторы, вы должны наложить на него ограничение или изменить маршрут. Ограничение для числовых идентификаторов должно выглядеть следующим образом:
routes.MapRouteLowerCase(
"Cars", // Route name
"Cars/{id}", // URL with parameters
new { controller = "Cars", action = "Details" },
new { id = @"\d+" }
);
Когда вы получите доступ к Cars/New
, первый маршрут не будет достигнут, потому что New
не удовлетворяет ограничениям ID, поэтому обработка маршрута будет продолжена со следующего маршрута (что разрешит его просто отлично - как и должно).
Помните, что id
больше не является обязательным. В случае наложения ограничений на это не может быть. Если у вас есть действие контроллера Details
, оно, скорее всего, должно отображать некоторые подробности. Так что на самом деле нужен какой-то идентификатор.