2010-12-15 3 views
0

의 내가이 같은 URL 있다고 가정 해 봅시다 :asp.net MVC에서 경로에 "부품"이 없을 때 리디렉션하는 방법은 무엇입니까?

www.site.com/en/home/list/2010-09-30 

은 "EN은"영어의 경우, 나는 URL에 언어 토큰 세트는 항상이 있는지 확인하고 싶다. 사용자가 www.site.com/home/list/2010-09-30을 입력하면 www.site.com/en/home/list/2010-09-30 (여기서 en은 기본 언어 임)으로 리디렉션합니다.

asp.net MVC (해당되는 경우 버전)에서 가장 잘 수행되는 방법은 무엇입니까?

답변

2

사용자 지정 HttpModule에서 처리하는 것이 가장 좋습니다. 이미 알고있을 것이라고 확신하지만, 경우에 따라 경로 선언에 경로 값 "en"을 기본값으로 설정할 수도 있습니다. 페이지를 리디렉션하지 않지만 해당 문화권은 URL에없는 경우 항상 코드로 설정됩니다.

routes.MapRoute(
       "WildCard", 
       "{*url}", 
       new { controller = "Main", action = "EnglishDefault" } 
      ); 

그런 다음 액션은 다음과 같습니다 :

context.MapRoute(
    "Default", 
    "{culture}/{controller}/{action}/{id}", 
    new { culture = "en", action = "Index" }); 
+0

사용자 정의 HttpModule에서 이것이 어떻게 처리되는지 예제가 있습니까? 여기에 설명 된대로 HttpModule을 만들 수 있습니다. http://wiki.asp.net/page.aspx/909/custom-http-module/하지만 이전에 빌드 한 적이 없기 때문에 언어를 확인하는 방법을 잘 모르겠습니다. , 경로에 대한 액세스 권한이 있습니까? – Chaddeus

0

간단한 해결책은 와일드 카드 경로가하는 것입니다 (이것은 당신의 Global.asax 파일의 맨 아래에 있어야한다)

public ActionResult EnglishDefault (string url) 
{ 
    return Redirect("/en/" + url); 
} 
+0

와일드 카드 경로가 내가 설명하는 URL의 차이를 잡을까요? 와일드 카드 루트에 도달하지 못했던 것처럼 보입니다. 아이디어를 가져 주셔서 감사합니다. – Chaddeus

+0

@Chad - 제대로 포맷 된 URL을 처리하기 위해이 와일드 카드 경로 위에 경로가 정의되어 있는지 확인합니다. 이 라우트는 라우트 테이블의 맨 아래에서 캐치로 사용되어 올바른 형식으로 다시 연다. – amurra

관련 문제