Pregunta

Normalmente, mis URL se parecen al estándar: www.example.com/controller/action

Ahora quiero configurar mi sección de administración como:

 www.example.com/admin/
 www.example.com/admin/user/list
 www.example.com/admin/content/add
etc.

Entonces el formato es: www.example.com/admin/controller/action

Parece que no puedo entender cómo configurar las rutas para que se vea como lo anterior.

¿Fue útil?

Solución

Solo necesita mapear una nueva ruta con la sección 'admin' codificada al comienzo de la definición de ruta.

Por ejemplo, agregue esto a sus rutas en RegisterRoutes en el archivo Global.asax.cs y asegúrese de que aparezca sobre la ruta predeterminada (suponiendo que no haya agregado otras rutas):

routes.MapRoute(
    "Default",                                              
    "admin/{controller}/{action}/{id}",                     
    new { controller = "Home", action = "Index", id = "" } 
);

Nota: la parte 'admin' codificada al comienzo de la definición de ruta.

Nota 2: si ha agregado otras rutas más allá de las predeterminadas, deberá asegurarse de que sus rutas estén ordenadas correctamente.

Aquí hay un enlace a una buena publicación de blog de Scott Guthrie sobre el enrutamiento MVC : Enrutamiento de URL

Otros consejos

La respuesta de Kelsey es correcta, pero quería agregar algo a la discusión. Otra opción es no tener realmente "admin" rutas en absoluto, pero en su lugar requieren sesiones autenticadas por el administrador para acceder realmente a las URL restringidas.

Esto es a menudo cómo se hacen las cosas en "tradicional" Aplicaciones RESTful. Su controlador representa el tipo de recurso que está manipulando, la acción es el verbo y la identificación es el identificador único para un miembro específico de ese recurso.

En otras palabras, en lugar de tener:

/content/list (for normal users)
/admin/content/add (for admins)

Tendrías

/content/list (for everyone)
/content/add (for admin, but must be authenticated to work)

Agregar / admin / a la URL realmente no agrega ningún beneficio (excepto quizás que pueda escribir su lógica de seguridad con solo una sola regla contra cualquier cosa bajo / admin), pero la compensación es rutas más complicadas y rompe el RESTful estándar . Romper las prácticas estándar no es en sí mismo algo malo, pero debe considerar que son estándar por una razón y, a menos que tenga beneficios específicos para romperlas, podría considerar adherirse a ellas.

Cabe señalar que en ambos estilos de URL debe autenticar al usuario, de lo contrario, cualquiera podría usarlo.

En ASP.NET MVC, puede restringir el acceso a acciones (o incluso controladores completos) según el nivel de usuario utilizando ActionFilters. Al decorar sus acciones solo para administradores con estos filtros, puede asegurarse de que solo los usuarios administrativos autenticados puedan usarlas.

Leer entrada de blog de Scott Gu o Rob Connery's publicar para obtener más información.

A partir de MVC Versión 2, han agregado el concepto de 'área' que le permite hacer esto correctamente :) Aquí está Publicación de ScottGu sobre MVC 2 Preview .

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top