2014-01-20 3 views
2

this 가이드를 따라 갔고 언어 지원이 제대로 작동합니다. URL은 http://domain.com:33982/en-us/Test과 같이 훌륭합니다.culture URL이있는 ASP.Net MVC 5 라우팅

그러나 내 문제는 http://domain.com:33982/Test과 함께 작동하도록하려는 것입니다. 나는 그것을 어떻게 링크의 문화가없는 경로를 ... 그것이 작동하지 않는 이유를 정말 이해가 안

  routes.MapRoute(
      name: "Default", 
      url: "{culture}/{controller}/{action}/{id}", 
      defaults: new { culture = CultureHelper.GetDefaultCulture(), controller = "Home", action = "Index", id = UrlParameter.Optional } 
     ); 
     routes.MapRoute(
name: "MissingCulture", 
url: "{controller}/{action}/{id}", 
defaults: new { culture = CultureHelper.GetDefaultCulture(), controller = "Test", action = "PageMissing", id = UrlParameter.Optional } 
); 

RouteConfig.cs에서 내 경로를 알아낼 수 없습니다./Test로 이동하면 나를 기본 홈/색인으로 리디렉션합니다.

제안 사항? 감사합니다

+0

를? –

+0

[경로 및 URL의 ASP.NET MVC 5 문화권] (http://stackoverflow.com/a/32839796/181087) – NightOwl888

답변

4

왜냐하면 첫 번째와 두 번째 경로가 모두 일치하기 때문입니다. 선택적 매개 변수는 응용 프로그램이 일치하는 첫 번째 매개 변수를 선택하도록합니다. 따라서 첫 번째 매개 변수가 항상 선택됩니다.

이 시도 :

 routes.MapRoute(name: "DefaultWithCulture" 
         , url: "{culture}/{controller}/{action}/{id}" 
         , defaults: new { culture = "en-us", controller = "Home", action = "Index", id = UrlParameter.Optional } 
         , constraints: new { culture = "[a-z]{2}-[a-z]{2}" } 
     ); 

     routes.MapRoute(name: "Default" 
         , url: "{controller}/{action}/{id}" 
         , defaults: new { culture = "xx-xx", controller = "Home", action = "Index", id = UrlParameter.Optional } 
     ); 

그것은 (그들 뒤에 retulting 문화) 여기를 통해 작동합니다 : 당신이 기본 노선에 문화에 대한 기본 설정 해달라고 경우 어떻게

http://host/ (en-us) 
http://host/Home/Index (xx-xx) 
http://host/zh-cn/Home/Index (zh-cn) 
+0

정말로 Test (모든 컨트롤러의 이름)를 route.cs에 추가하고 싶지 않습니다. . 이 경우 {controller}를 사용하고 싶습니다. – robertk

+0

일치하는 엔진이 문제임을 보여주는 예제입니다. 라우팅 엔진이 올바른 결정을 내리려면 무엇인가해야합니다. 업데이트 된 예. –

+0

내가보기에, DefaultCulture를 가지지 않는 방법이 있습니까? domain.com/{controller}와 (과) 함께 작업하고 culture가 없기 때문에 오류 페이지로 리디렉션하지 않기를 바랍니다. – robertk