Enrutamiento personalizado de .NET MVC
-
06-07-2019 - |
Pregunta
Me preguntaba si podría crear un mapa de enrutamiento con un nivel más alto que el controlador. El enrutamiento típico incluiría " / controller / action / id " ;. Lo que estoy buscando es algo así como "sección / controlador / acción / id" o "controlador / sección / acción / id". ¿Cómo puedo hacer esto?
Solución
No hay problema. Simplemente cree una ruta cuya URL sea, por ejemplo
path/to/my/application/{controller}/{action}/{id}
... y proporcione un controlador predeterminado y una acción como de costumbre.
Un ejemplo concreto de esto es
context.MapRoute(
"Admin_default",
"admin/{controller}/{action}/{id}",
new { controller = "AdminHome", action = "Index", id = "" }
);
Esto asignará, por ejemplo, las siguientes URL:
/admin/ => AdminHomeController.Index
/admin/adminhome/ => AdminHomeController.Index
/admin/other/ => OtherController.Index
/admin/statistics/view/50 => StatisticsController.View(50)
Tenga en cuenta, sin embargo, que si también tiene una ruta predeterminada, por ejemplo, así:
context.MapRoute(
"Default",
"{controller}/{action}/{id}",
new { controller = "Home", action = "Index", id = "" }
);
... entonces también se puede acceder a los métodos de acción del controlador en la ruta del administrador a través de esta ruta. Utilice el Depurador de enrutamiento de URL para saber con certeza .