Pregunta

Me gustaría configurar una ruta para un controlador que tenga las operaciones CRUD normales, pero me gustaría que la acción Detalles no muestre 'Detalles' en la URL. Parece que Stackoverflow tiene este tipo de enrutamiento configurado:

http://stackoverflow.com/questions/999999/
http://stackoverflow.com/questions/ask

Usando esta analogía, mis rutas parecen:

http://stackoverflow.com/questions/Details/999999/

Al agregar la siguiente ruta, pude eliminar Detalles :

routes.MapRoute("Q1", "questions/{id}", 
    new { controller = "Questions", action = "Details" });

Sin embargo, al extraer otras acciones en el controlador (por ejemplo, / questions / new para este ejemplo) se queja de que la identificación no se puede analizar.

¿Hay alguna forma de configurar las rutas para que no tenga que ingresar manualmente todas las demás acciones (MapRoute " elementos / crear " ;, " elementos / eliminar " ;, etc.) manualmente en el Global. asax.cs? Básicamente me gustaría tener una segunda ruta como:

routes.MapRoute("Q2", "questions/{action}", 
    new { controller = "Questions", action = "Index" });

... y haga que el motor de enrutamiento use la ruta Q1 si {id} coincide con un entero, y {action} si es una cadena. ¿Es esto posible?

¿Fue útil?

Solución

Si coloca una restricción de ruta en la primera para que el campo de identificación solo pueda ser un entero, creo que cualquier otra acción caerá en el valor predeterminado.

routes.MapRoute("Q1", 
   "questions/{id}", 
   new {controller = "Questions", action = "Details"},
   new { id=@"\d+" });

Cualquier otra cosa debe ser manejada por la ruta predeterminada. Así que " preguntas / 3553 " golpearía a éste pero " preguntas / preguntar " no coincidiría Probablemente querrá poner la ruta más específica primero en su archivo Global.asax.cs.

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