2010-02-26 7 views
8

L'un des principaux obstacles que je semble avoir récemment est de comprendre certains des besoins de routage les plus complexes de certaines applications MVC que j'ai développées. J'ai de la difficulté à trouver le bon ensemble de tutoriels pour me guider à travers le processus afin d'avoir une compréhension complète. Ce que je voudrais trouver est un ensemble complet de tutoriels pour tout le routage de base (contrôleur/action/id) à avancé.Didacticiels et exemples avancés de routage ASP

Un exemple de ce que j'appelle le routage avancé est des choses comme:

/blog/year/month/day/title - tracerait au contrôleur: blog et de l'action: post et comme paramètres: year, month, day et title

/blog/title - serait mappé au contrôleur: blog et action: post et comme paramètres: title

/title - tracerait au contrôleur: blog et de l'action: post et comme paramètres: title

je pouvais associer chaque ensemble possible d'une voie explicite mondiale en utilisant une base de données, mais qui semble comme il est vaincu le point d'avoir le moteur de routage route vers l'endroit correct. Je préfère définir la règle une fois.

Répondre

15

Je ne comprends pas, pourquoi ne pouvez-vous pas simplement définir chacun d'eux comme une route distincte, en utilisant l'expression régulière si nécessaire. Par exemple pour différencier les /blog/year/month/day/title et /blog/title.

Chacun de ces ensembles est un cas distinct, et vous devrez dire à MVC quoi faire avec chacun d'entre eux. Vous pouvez le faire en defining the rule once dans le fichier Global.asax.cs:

Pour le premier cas: /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 
    ); 

Pour second cas: /blog/title

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

Pour dernier cas: /title

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

L'astuce consiste à mettre ces routes dans cet ordre précis, avec le moins spécifique en bas. Changer l'ordre entraînerait l'utilisation d'une mauvaise route (spécifiquement dans les deux derniers). Si le dernier cas a été basculé avec le second cas, les URL du type blog/SomeTitle se dirigeraient vers l'action post avec blog comme titre.

Chaque fois que vous créez un itinéraire pour quelque chose, gardez ceci à l'esprit:

  1. paramètres d'itinéraire Constraint avec RegEx
  2. Soyez very au courant de l'ordre de l'itinéraire (quelle route est devant laquelle)
  3. l'action {something} entre parenthèse désignent squiggly paramètres

Quelques bons tutoriels:

+0

bonne explication et des liens, je vous remercie. – Kieron

+0

Réponse fantastique. –