2009-07-22 12 views
6

En ASP.NET MVC, ¿es posible definir rutas que pueden determinar qué controlador usar en función del tipo de datos de parte de la URL?Rutas de URL de ASP.NET MVC

Por ejemplo:

routes.MapRoute("Integer", "{myInteger}", new { controller = "Integer", action = "ProcessInteger", myInteger = "" }); 

routes.MapRoute("String", "{myString}", new { controller = "String", action = "ProcessString", myString = "" }); 

Esencialmente, quiero las siguientes URL para ser manejado por diferentes controladores a pesar de que tienen el mismo número de piezas:

mydomain/123

mydomain/ABC

PS El código anterior no funciona, pero es indicativo de lo que quiero lograr.

Respuesta

7

Sí, si se utiliza constraints:

así:

routes.MapRoute(
       "Integers", 
       "{myInteger}", 
        new { controller = "Integer", action = "ProcessInteger"}, 
        new { myInteger = @"\d+" } 
     ); 

Si pones esa ruta por encima de su ruta de cadena (que no contiene la restricción para @"\d+"), entonces va a filtra cualquier ruta que contenga números enteros, y todo lo que no tenga enteros se pasará y tu ruta string lo recogerá.

El verdadero truco es que las Rutas pueden filtrar lo que está pasando según Regular Expressions, y así es como se puede determinar qué debería recogerlo.

+0

Eso funciona un placer, gracias. –

+0

No hay problema. He tenido * plenty * de problemas con las rutas ASP.NET MVC. Suficiente para llenar un libro. O algunas publicaciones en el blog. Si alguna vez puedo tener la oportunidad de terminarlos. –

Cuestiones relacionadas