2016-07-26 18 views
0

Ich habe zwei verschiedene Fälle von Kartenrouten in routeconfig.cs erstellt.Benutzerdefinierte Routing in ASP.NET MVC

// case 1 
routes.MapRoute("Default2","{x}", new {controller = "Home", action = "Index"}); 
// case 2 
routes.MapRoute("Default3","{controller}", new {controller = "Home", action = "Index"}); 

Die Frage ist, ob ich Fall 1 verwenden und Eingang ist example.com dann die URL-Muster übereinstimmt nicht, obwohl Standard-Controller und die Aktion

vorgesehen ist

für den Fall 2 und Eingang ist example.com es Standard-Controller feuert und Aktion. Warum passiert das?

Ich glaube, dass muss mit Fall 1 auch passieren, aber was könnte der Grund sein? Jede Hilfe wird sehr geschätzt.

+0

Denken Sie daran, dass das MVC-Routing von oben nach unten ausgewertet wird. Daher wird route mit x-Parameter zuerst vor dem Standard-Controller ausgewertet. Wenn Sie den Standardwert für x festlegen möchten, platzieren Sie 'new {x = 'Home'}' in Ihren Standardeinstellungen. –

Antwort

0

In diesem Fall gilt:

// case 1 
routes.MapRoute("Default2","{x}", new {controller = "Home", action = "Index"}); 

Du einen Standardwert für den Platzhalter nicht definieren {x} daher dieser Weg erfordert genau 1-Segment, um (das kann beliebigen Wert enthalten) die entsprechen URL So wird es /foo oder /bar übereinstimmen, aber nicht / oder /foo/bar übereinstimmen.

In diesem Fall:

// case 2 
routes.MapRoute("Default3","{controller}", new {controller = "Home", action = "Index"}); 

Sie sind einen Standardwert für {controller} liefern, die wirksam wird, wenn es nicht in der URL zugeführt wird. Daher entspricht es der URL / und wird in diesem Fall an die Methode HomeController.Index weitergeleitet.