Дополнительные сегменты могут быть размещены только в конце вашего маршрута или лучше после требуемых .Вот почему вы должны добавить дополнительное определение маршрута без сегмента id
, которое также определяет его по умолчанию как 0
.
id
является числовым
public static void RegisterRoutes(RouteCollection routes)
{
routes.IgnoreRoute("{resource}.axd/{*pathInfo}");
routes.IgnoreRoute("{*favicon}", new { favicon = @"(.*/)?favicon.ico(/.*)?" });
routes.MapRoute(
"Default",
"{id}/{controller}/{action}",
new { controller = "Home", action = "Index" },
new { id = @"\d+" }
);
routes.MapRoute(
"DefaultId",
"{controller}/{action}",
new { controller = "Home", action = "Index", id = "0" }
);
}
Как видите,первое определение маршрута также включает в себя ограничение для сегмента id
, которое требует, чтобы он был числовым.Это хитрость.
id
является буквенно-цифровым, но не совпадает ни с одним именем контроллера
В случае, если id
не числовое, но может быть буквенно-цифровым, вам придется использовать другой подход...
public static void RegisterRoutes(RouteCollection routes)
{
routes.IgnoreRoute("{resource}.axd/{*pathInfo}");
routes.IgnoreRoute("{*favicon}", new { favicon = @"(.*/)?favicon.ico(/.*)?" });
routes.MapRoute(
"DefaultId",
"{controller}/{action}",
new { controller = "Home", action = "Index", id = "0" },
new { controller = @"Home|Admin|Categories|Items" }
);
routes.MapRoute(
"Default",
"{id}/{controller}/{action}",
new { controller = "Home", action = "Index", id = "0" }
);
}
Тогда вам нужно будет наложить ограничение на сегмент controller
, потому что у вас есть их конечное число.Имейте в виду, что определения маршрутов поменялись местами, так что идентификатор без идентификатора теперь первый, а с id
- второй.Это должно работать до тех пор, пока id
никогда не может иметь то же значение, что и имя контроллера.
id
может быть чем-то действительно
Но что, если id
может иметь значение, равноеимя контроллера?В таком случае вам придется более строго определять правила маршрутизации, поскольку вам, скорее всего, придется опускать значения по умолчанию и предоставлять больше маршрутов на основе количества сегментов: ноль, один, два, три или даже больше, если требуется.