Próbuję utworzyć identyfikatory URI, które wyglądają trochę mniej więcej tak: http://hostname/mobile/en/controller/action
dla telefonów komórkowych LUB http://hostname/en/controller/action
dla komputerów stacjonarnych (inne niż telefony komórkowe).Trasa zawsze przechodzi do pierwszego maproute
My Route obecnie wygląda następująco (Global.asax.cs)
routes.IgnoreRoute("{resource}.axd/{*pathInfo}");
routes.MapRoute(
"Mobile", // Route name
"mobile/{language}/{controller}/{action}/{id}", // URL with parameters
new { 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 { language = "en", controller = "Route", action = "Index", id = UrlParameter.Optional }, // Parameter defaults
new { language = @"en|us" } // validation
);
Problem pojawia się, gdy próbuję zrobić return RedirectToAction("Add", "User");
To zawsze przekierowuje przeglądarkę na pulpicie z /en/User/List
do /mobile/en/User/Add
kiedy chcę to przejść do /en/User/Add
. Wersja mobilna działa poprawnie, ale uważam, że dzieje się tak dlatego, że pierwsza "mobilna" trasa zawsze była postrzegana jako trasa, która pasuje, nawet jeśli nie ma/mobilnego/na starcie.
Próbuję użyć tego samego Controller dla obu wersji, ale jestem zatrzymany na zawsze przekierowanie do Telefony trasie. Oznacza to, że RedirectToRoute
nie jest idealny, ponieważ chcę dynamicznych tras.
Dzięki za pomoc.
Dziękuję René, że wyglądają dokładnie tak, jak miałem nadzieję. Czy możesz mi powiedzieć, gdzie najlepiej jest umieścić metodę przedłużenia? – Adrian
Umieść statyczne rozszerzenie ControllerExtensions gdziekolwiek chcesz. A w kontrolerze chciałbyś skorzystać z przekierowania, pamiętaj o włączeniu przestrzeni nazw, w której znajduje się klasa rozszerzeń. Następnie w dowolnym miejscu kontrolera możesz użyć this.CusomRedirectToRoute ("Home", "Index", routeValues); Możesz także dodać inną metodę rozszerzenia, która wstawi null jako wartość routeValues, jeśli chcesz. –
Jeśli chcesz go posprzątać, ostatnia część mojego komentarza może zostać zastąpiona przez czysty i uporządkowany system uzyskiwania nazwy trasy opisanej w tym wpisie: http://stackoverflow.com/questions/363211/how -can-i-get-the-nazwa-trasy-w-kontrolerze-w-asp-net-mvc –