2016-06-09 23 views
1

Ich versuche, URLs in asp.net MVC5 zu erstellen. Das Verhalten, das ich sehen bin für unter:Asp.net MVC5 Route Parameter Problem

http://www.example.com/es/faqs ----> when language is Spanish 
http://www.example.com/faqs ----> when language is english 

Meine Route für diese URL:

routes.MapRoute(
     name: "FAQs", 
     url: "{lang}/FAQs", 
     defaults: new { controller = "StaticPages", action = "FAQs", lang= UrlParameter.Optional } 
    ); 

Diese URL macht in Spanisch finden ->http://www.example.com/es/faqs

Aber mein Problem ist, dass diese URL funktioniert nicht richtig ->http://www.example.com/faqs

Wenn ich versuche, diese URL zu besuchen, bekomme ich eine Seite nicht gefunden Fehler.

In meiner Route versuche ich, lang (Sprachcode) optional zu machen, warum funktioniert meine Route nicht, wenn kein Sprachcode in der URL enthalten ist.

+0

Optionale Parameter sind vermutlich das Letzte in der Routenvorlage. Es funktioniert nicht, wenn nach dem optionalen Parameter etwas vorhanden ist. – Nkosi

+0

Sie können sich [diese Antwort] (http://stackoverflow.com/a/32839796/181087) für die Verwaltung der Standardsprache ansehen. Es ist auch möglich, ein Dekorationsmuster in der 'Route'-Klasse zu verwenden und/oder ein benutzerdefiniertes Attribut-Routing zu verwenden, so dass nicht jede Route dupliziert werden muss. – NightOwl888

Antwort

1

Optionale Parameter sind vermutlich das Letzte in der Routenvorlage. Es funktioniert nicht, wenn nach dem optionalen Parameter etwas vorhanden ist. Sie müssen zwei Vorlagen erstellen, um die beiden Formate

zu ermöglichen.
routes.MapRoute(
     name: "LocalizedFAQs", 
     url: "{lang}/FAQs", 
     defaults: new { controller = "StaticPages", action = "FAQs", lang = "en" } 
); 

routes.MapRoute(
     name: "DefaultFAQs", 
     url: "FAQs", 
     defaults: new { controller = "StaticPages", action = "FAQs", lang = "en" } 
); 
+0

@ Nikosi, also gibt es keine Möglichkeit, dies ohne doppelte Routen zu erreichen? –

+0

Nicht zu meinem Wissen. Von vielen der Beispiele, die ich gesehen habe, sobald Sie einen optionalen Parameter in der Route haben, können Sie danach nichts mehr haben. Sehen Sie sich diese ähnliche Frage an - http://Stackoverflow.com/a/32839796/5233410 – Nkosi

Verwandte Themen