2016-06-09 3 views
1

asp.net MVC5에서 URL을 만들려고합니다. 나는에 대한 모양이야 동작은 다음과 같습니다 :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