2010-02-26 18 views
8

Uno de los principales obstáculos que parece tener recientemente es conocer algunos de los requisitos de enrutamiento más complejos para algunas aplicaciones basadas en MVC que he estado desarrollando. Tengo problemas para encontrar el conjunto correcto de tutoriales que me ayuden a comprenderlo por completo.Tutoriales avanzados de enrutamiento ASP y ejemplos

Lo que me gustaría encontrar es un conjunto completo de tutoriales para todo el enrutamiento, desde básico (controlador/acción/id) hasta avanzado.

Un ejemplo de lo que estoy llamando enrutamiento avanzado es cosas como:

/blog/year/month/day/title - sería asignar al controlador: blog y la acción: post y como parámetros: year, month, day y title

/blog/title - asignaría al controlador: blog y acción: post y como parámetros: title

/title - sería asignar al controlador: blog y la acción: post y como parámetros: title

pude asignar cada conjunto posible de una ruta explícita en global usando una base de datos, pero que parece que es derrotar el punto de tener el motor de enrutamiento ruta al lugar correcto. Prefiero definir la regla una vez.

Respuesta

15

No entiendo, ¿por qué no puede simplemente definir cada una de ellas como una ruta separada, utilizando expresiones regulares cuando sea necesario? Por ejemplo, para diferenciar entre /blog/year/month/day/title y /blog/title.

Cada uno de esos juegos es un caso separado, y tendrá que decirle a MVC qué hacer con cada uno. Usted puede hacer esto mediante defining the rule once en el archivo Global.asax.cs:

Para el primer caso: /blog/year/month/day/title

routes.MapRoute(
    "Blog Full Route", // Route name 
    "blog/{year}/{month}/{day}/{title}", // URL with parameters 
    new {controller = "blog", action = "post"}, // Defaults 
    new {year = @"\d+", month= @"\d+", day = @"\d+"} // Constrain parameters with RegEx patterns 
    ); 

Por segundo caso: /blog/title

routes.MapRoute(
    "Blog Title Route", // Route name 
    "blog/{title}", // URL with parameters 
    new {controller = "blog", action = "post"}, // Defaults 
    ); 

Por último caso: /title

routes.MapRoute(
    "Title Route", // Route name 
    "{title}", // URL with parameters 
    new {controller = "blog", action = "post"}, // Defaults 
    ); 

El truco está en poner estas rutas en este orden exacto, con el mínimo específico en la parte inferior. Si cambia el orden, se utilizará la ruta incorrecta (específicamente en los dos últimos). Si el último caso se cambió con el segundo caso, las URL del tipo blog/SomeTitle se enrutarían a la acción post con blog como título.

Cada vez que se va a crear una ruta para algo, tenga en cuenta lo siguiente:

  1. parámetros de la ruta de restricción con RegEx
  2. very Sé consciente de orden de marcha (que viene ruta antes de la cual)
  3. la acción {something} denotan corchetes serpenteante parámetros

Algunos buenos tutoriales:

+0

buena explicación y enlaces, gracias. – Kieron

+0

Fantástica respuesta. –

Cuestiones relacionadas