2016-08-13 4 views
0

diesesRouting Config-Problem kann nicht

http://localhost:51095/Person // This is equivalent to this one Person/Index 
http://localhost:51095/Person/Allan 

ich ein Setup Route Config für seine URL Gegeben aufgelöst werden, wie folgt:

routes.MapRoute(
    "Person", 
    "Person/{personName}", 
    new { controller = "Person", action = "Person", personName = UrlParameter.Optional } 
    ) 
; 

routes.MapRoute(
    "Default", // Route name 
    "{controller}/{action}/{id}", // URL with parameters 
    new { controller = "Home", action = "Index", id = UrlParameter.Optional } // Parameter defaults 
); 

Erste URL der Default Route folgen sollte und der zweite sollte die Person folgen Route.

Das funktioniert nicht, weil die erste Konfiguration

+1

Entfernen Sie 'personName = UrlParameter.Optional' Dies führt jedoch wahrscheinlich zu anderen Problemen, wenn Sie eine Aktionsmethode in' PersonController' mit Ausnahme von 'Index()' und 'Person()' haben, außer Sie erstellen eine spezifische Route für alle andere Methoden –

+0

@ StephenMuecke genau, aber wie kann ich das tun? Soll ich eine Route-Annotation verwenden? Mein Plan ist, nur die Regel in bestimmten Aktionen anzuwenden, aber einige Methoden werden davon betroffen. – Sherlock

+0

Das hängt möglicherweise davon ab, welche anderen Methoden in 'PersonController' enthalten sind. Ändert es sich mit '/ People/Allan'? –

Antwort

0

Das erste, was die alle diese URL zu fangen scheint, ich tun würde, ist personName = UrlParameter.Optional in der ersten Strecke zu entfernen. Dies würde nur URLs zulassen, die einen personName-Wert für den Zugriff auf diese Route bereitstellen. Wenn kein Wert angegeben wird, sollte dieser auf die Standardroute fallen.

Aber Sie möchten mit dieser Strategie über die Zukunft nachdenken: Wenn Sie neue Aktionen auf diesem Personen-Controller implementieren, müssen Sie für jeden eine neue Route hinzufügen. Wenn Sie eine neue ‚Bearbeiten‘ Aktion zum Beispiel haben:

routes.MapRoute(
"Person_Edit", 
"Person/Edit/{personName}", 
new { controller = "Person", action = "Edit" } 
) 

Sie wollen würden diese neuen Routen vor die ersten hinzuzufügen obwohl - Bestellung/Vorrang der Routen ist wichtig.

+0

habe die Idee, ich plane, ein MVC 5 Routing in meinen Aktionen hinzuzufügen – Sherlock