2010-06-08 14 views
11

He visto la ruta en StackOverflow y tengo una pregunta muy noobie, pero algo que me gustaría aclarar, no obstante.¿Encaminamiento del usuario de ASP.NET MVC así en StackOverflow?

estoy buscando específicamente en el controlador de Usuarios

https://stackoverflow.com/Users
https://stackoverflow.com/Users/Login
https://stackoverflow.com/Users/124069/rockinthesixstring

Lo que estoy notando es que hay una "Usuarios" controlador probablemente con un defecto "Índice" acción y una acción de "Inicio de sesión". El problema al que me enfrento es que la acción de inicio de sesión se puede ignorar y también se puede usar un "UrlParameter.Optional [ID]".

¿Cómo se ve esto exactamente en la colección RegisterRoutes? ¿O me estoy perdiendo algo totalmente obvio?

EDITAR: Esta es la ruta que tengo actualmente ... pero definitivamente está lejos de ser la correcta.

routes.MapRoute(_ 
     "Default", _ 
     "{controller}/{id}/{slug}", _ 
     New With {.controller = "Events", .action = "Index", .id = UrlParameter.Optional, .slug = UrlParameter.Optional} _ 
    ) 
+0

No sé por qué la gente vota a cerrar. Esta es una pregunta legítima de programación. Estoy realmente interesado en entender esto. –

+0

¿Dónde ves la votación para cerrar? –

+0

Esto __not__ no pertenece a Meta. –

Respuesta

5

Probablemente sólo utiliza una ruta específica para manejarlo, también usando una expresión regular para especificar el formato de la ID (por lo que no se confunda con otras rutas que contendría los nombres de acción en esa posición).

// one route for details 
routes.MapRoute("UserProfile", 
    "Users/{id}/{slug}", 
    new { controller = "Users", action = "Details", slug = string.Empty }, 
    new { id = @"\d+" } 
); 
// one route for everything else 
routes.MapRoute("Default", 
    "{controller}/{action}/{id}", 
    new { controller = "Home", action = "Index", id = UrlParameter.Optional} 
); 
+0

Estoy de acuerdo en que este enfoque directo funcionará pero también sospecho que el enfoque del autor es un poco más sofisticado: las rutas se almacenan en archivos externos y se cargan en tiempo de ejecución mientras que los enrutadores de enrutamiento de script java se generan por primera solicitud :) prácticas aquí –

+0

Independientemente de cómo se carguen las rutas, debe tener una forma específica de describir cómo la ruta se asigna al controlador. Acción con los parámetros adecuados. ¿Derecha? –

+0

Sí. Sería muy bueno si los autores bajaran y respondieran :) –

1

Sin un desarrollador SO que dé una respuesta definitiva, la ingeniería inversa podría producir muchas combinaciones y permutaciones posibles. Aquí hay uno que creo que encajar demasiado:

routes.MapRoute(
    "UserProfile", 
    "Users/{id}/{slug}", 
     new { controller = "Users", action = "Profile" } 
); 

routes.MapRoute(
    "UserLogin", 
    "Users/Login", 
    new { controller = "Users", action = "Login" } 
); 

routes.MapRoute(
    "DefaultUser", 
    "Users", 
    new { controller = "Users", action = "Index" } 
); 
Cuestiones relacionadas