2011-07-25 5 views
0

다른 언어로는 페이지 컨트롤러가 처리하는 간단한 "CMS"페이지가있는 다국어 MVC 응용 프로그램이 있습니다. 내가 정의한 경로는 다음과 같습니다 MVC 경로 충돌 관련 문제

routes.MapRoute(
    "Page", 
    "Page/{name}", 
    new { controller = "Page", action = "Index", name = "" } 
); 

이 또한 내가 현재 페이지의 언어를 변경하는 데 사용되는 "기본 컨트롤러"에 정의 된 방법이있다. 예를 들어

public ActionResult ChangeCulture(Culture lang, string returnUrl) 
{ 
    if (returnUrl.Length >= 3) 
    { 
     returnUrl = returnUrl.Substring(3); 
    } 

    return Redirect("/" + lang.ToString() + returnUrl); 
} 

는 영어로 "소개"페이지, 스페인어 버전은 다음 URL을 통해 볼 수 있습니다 : http://localhost/en/Page/ChangeCulture?lang=2&returnUrl=/es/Page/AboutUs

문제는 그 제가했습니다 노선이 URL 맵 분명히 존재하지 않는 CMS 페이지에 대해 정의됩니다. URL "페이지/변경 사항"을 무시할 수있는 방법이 있습니까? 예를 들어 "기본 컨트롤러"에 정의 된 올바른 방법으로 매핑됩니까?

감사합니다,

호세

답변

0

당신은 이름 매개 변수에 route constraint 설정을 시도 할 수 있습니다.

routes.MapRoute(
       "Page", 
       "Page/{name}", 
       new { controller = "Page", action = "Index", name = "" }, 
       new { name = new PageNameConstraint() } 
       ); 
+0

이것은 완벽하게 작동합니다. - 감사합니다. – jose

0

URL을 다시 구성해야합니다. About us 페이지의 스페인어 버전이 다른 URL로 제공되는 이유는 무엇입니까? 당신의 예에서 :

  1. http://localhost/en/Page/ChangeCulture?lang=2&returnUrl=/es/Page/AboutUs
  2. http://localhost/es/Page/AboutUs

은 (이 예에서는 두 번째)를 일관된 URL과 모든 언어의 모든 페이지 작업을합니다. 라우팅은 다음과 같습니다

routes.MapRoute(
    "Page", 
    "{lang}/Page/{name}", 
    new { controller = "Page", lang = "en", action = "Index", name = "" } 
); 

하고도 대신 RedirectRedirectToaction를 호출하고 URL을 구성의보다 강력한 양식을 사용할 수 있습니다. 예 : :

RedirectToAction("Index", new { page = "AboutUS", lang = "es" }); 
+0

내가 추가 한 URL은 "ChangeCulture"메서드와 같은 이름의 페이지에 혼란이 있음을 나타 내기위한 것입니다. "About Us"페이지에 대한 내 링크는 http : // localhost/es/Page/AboutUs (스페인어) 및 http : // localhost/en/Page/AboutUs (영어)입니다. – jose