Есть причина, вы не можете просто использовать следующие с помощью встроенного маршрута обработчика:
routes.MapRoute("LocationRoute",
"{countryname}/{statename}/{cityname}",
new { controller = "Location", action = "GetLocations" });
Это может противоречить по умолчанию «{контроллер}/{действие}/{ID}» маршрут, но это будет происходить с вашей текущей системой в любом случае (если вы не сделаете обычай Маршрут, наследующий от System.Web.Routing.RouteBase
, а не обычай Обработчик маршрута). Обработчик маршрута предназначен для обработки того, что делать ПОСЛЕ того, как данные маршрута были извлечены. Поскольку вы все еще используете Controller и Action, вы все равно сможете использовать MvcRouteHandler
. Если вы хотите настроить, как извлекаются данные маршрута, вам, вероятно, понадобится таможня Маршрут.
Btw, если вы хотите использовать маршрут, который не связан с именами контроллеров и действий, используйте Html.RouteLink
. ActionLink
- это всего лишь оболочка, которая помещает контроллер и действие в RouteValuesDictionary
и вызывает тот же внутренний помощник, что и RouteLink
.
Хотя в этом случае маршрут по-прежнему имеет контроллер и действие («Местоположение» и «GetLocations»), поэтому вы все равно можете использовать ActionLink
. I думаюActionLink
позволяет указать имя маршрута, поэтому, если вы укажете свой маршрут имени, вы можете указать это имя в ActionLink
, и он будет использовать этот маршрут для создания URL-адреса (возможно, я ошибаюсь в этом, и если так, используйте RouteLink
и вручную добавьте контроллер и значения маршрута действия)