Основная проблема заключается в том, что предоставленные вами значения маршрутов совпадают с обоими маршрутами, что означает, что он займет первый (мобильный).
Вы можете вручную выбрать, какой маршрут использовать, перенаправив на маршрутывместо действий.
return RedirectToRoute("Mobile", new {
language = "en", controller = "User", action = "Get", id = 20
});
для мобильного или
return RedirectToRoute("Default", new {
language = "en", controller = "User", action = "Get", id = 20
});
для вашего маршрута по умолчанию.
Однако это оставляет вас с новой проблемой: получение именитекущего маршрута.Как видно из примера, со ссылкой на именованные маршруты вполне возможен. Получение названия текущего используемого маршрута, однако, кажется невозможным.Использование хака, подобного просмотру текущего URI, явно нежелательно.Помимо того, что это некрасиво (взлом), это также может привести к значительному дублированию кода.
Однако существует возможность добавления значений к маршрутам, которые можно легко получить с вашего контроллера (или вида):
routes.MapRoute(
"Mobile", // Route name
"mobile/{language}/{controller}/{action}/{id}", // URL with parameters
new { routeName = "Mobile", language = "en", controller = "Route", action = "Index", id = UrlParameter.Optional }, // Parameter defaults
new { language = @"en|us" } // validation
);
routes.MapRoute(
"Default", // Route name
"{language}/{controller}/{action}/{id}", // URL with parameters
new { routeName = "Default", language = "en", controller = "Route", action = "Index", id = UrlParameter.Optional }, // Parameter defaults
new { language = @"en|us" } // validation
);
Теперь из своего кода вы можете перенаправить на текущий маршрут, используя значение, предоставленное самим маршрутом:
return RedirectToRoute(RouteData.Values["routeName"], new {
language = "en", controller = "User", action = "Get", id = 20
});
Теперь, если вы хотите сделать это совершенно необычным, вы можете дажесделайте из этого метод расширения:
public static class ControllerExtensions {
public static RedirectToRouteResult CustomRedirectToRoute(this Controller controller, string controllerName, string actionName, object routevalues) {
return CustomRedirectToRoute(controller, controllerName, actionName, new RouteValueDictionary(routevalues));
}
public static RedirectToRouteResult CustomRedirectToRoute(this Controller controller, string controllerName, string actionName, RouteValueDictionary routevalues) {
routevalues = routevalues ?? new RouteValueDictionary();
routevalues.Add("controller", controllerName);
routevalues.Add("action", actionName);
return new RedirectToRouteResult(controller.RouteData.Values["routeName"] as string, routevalues);
}
}
Надеемся, это поможет решить вашу проблему!