2010-02-26 7 views
8

Eine der größten Hürden, die ich in letzter Zeit zu haben scheint, besteht darin, einige der komplexeren Routing-Anforderungen für einige MVC-basierte Anwendungen, die ich entwickelt habe, zu verstehen. Ich habe Probleme, die richtigen Lernprogramme zu finden, um mich durch ein vollständiges Verständnis zu führen.Erweiterte ASP Routing Tutorials und Beispiele

Was ich gerne finden würde, ist eine komplette Reihe von Tutorials für alles Routing von Basic (Controller/Action/ID) bis Advanced.

Ein Beispiel dessen, was ich bin erweiterte Routing-Aufruf ist Dinge wie:

/blog/year/month/day/title - zur Steuerung würde Karte: blog und Aktion: post und als Parameter: year, month, day und title

/blog/title - würde Controller zuordnen: blog und Aktion: post und als Parameter: title

/title - würde Controller Karte: blog und Aktion: post und als Parameter: title

ich in global mit Hilfe einer Datenbank jeden möglichen Satzes auf eine explizite Routenkarte könnte, aber das scheint wie es ist der Punkt Sieg über das Routing-Engine des Habens Route zum richtigen Ort. Ich würde die Regel lieber einmal definieren.

Antwort

15

Ich verstehe nicht, warum können Sie nicht jeden einzelnen von ihnen als separate Route definieren, bei Bedarf mit regulärem Ausdruck. Zum Beispiel zur Unterscheidung zwischen /blog/year/month/day/title und /blog/title.

Jedes dieser Sets ist ein separater Fall, und Sie müssen MVC mitteilen, was mit jedem einzelnen zu tun ist. Sie können dies in der Global.asax.cs Datei von defining the rule once tun:

Für den ersten Fall: /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 
    ); 

Für zweiten Fall: /blog/title

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

Für den letzten Fall: /title

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

Der Trick besteht darin, diese Routen in genau diese Reihenfolge zu bringen, mit den am wenigsten spezifischen unten. Das Ändern der Reihenfolge würde dazu führen, dass die falsche Route verwendet wird (speziell in den letzten beiden). Wenn der letzte Fall mit dem zweiten Fall umgeschaltet wurde, würden URLs vom Typ blog/SomeTitle an die post Aktion mit blog als Titel weitergeleitet werden.

Jedes Mal, wenn Sie eine Route für etwas erstellen, ist Folgendes zu beachten:

  1. Constraint Routenparameter mit RegEx
  2. Seien very bewusst Route Ordnung (die Route vor dem kommt)
  3. die geschweiften Klammern {something} bezeichnen Aktionsparameter

Einige gute Tutorials:

+0

Gute Erklärung und Links, danke. – Kieron

+0

Fantastische Antwort. –

Verwandte Themen