2016-06-09 6 views
1

Я пытаюсь создать URL-адреса в asp.net MVC5. Поведение я искать ниже:Проблема с параметром маршрута Asp.net MVC5

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

Мой маршрут для этого URL:

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

Этот URL делает найти на испанском языке ->http://www.example.com/es/faqs

Но мой вопрос заключается в том, что это url не работает правильно ->http://www.example.com/faqs

Когда я пытаюсь посетить этот URL, я получаю сообщение об ошибке страницы.

В моем маршруте, я пытаюсь сделать lang (код языка) дополнительным, почему мой маршрут не работает, когда в URL-адресе нет кода языка.

+0

Необязательные параметры, как предполагается, являются последним в шаблоне маршрута. Он не будет работать, если после необязательного параметра есть что-то. – Nkosi

+0

Возможно, вы захотите ознакомиться с [этим ответом] (http://stackoverflow.com/a/32839796/181087), как управлять языком по умолчанию. Также можно использовать шаблон декоратора в классе «Route» и/или использовать настраиваемую маршрутизацию атрибутов, поэтому вам не нужно дублировать каждый маршрут. – NightOwl888

ответ

1

Необязательные параметры должны быть последними в шаблоне маршрута. Он не будет работать, если после необязательного параметра есть что-то. Вам нужно создать два шаблона для двух форматов.

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, так что нет способа добиться этого без дублирования маршрутов? –

+0

Насколько мне известно. Из многих примеров, которые я видел, когда у вас есть необязательный параметр на маршруте, у вас не может быть ничего после него. Взгляните на это похожее Q & A - http://stackoverflow.com/a/32839796/5233410 – Nkosi

Смежные вопросы