2011-10-20 4 views
0

두 개의 간단한 mvc3 경로, 사용자 이름 및 기본값은 모두 캐치합니다.MVC 경로, 쿼리 매개 변수

routes.MapRoute(
    "Users", 
    "{username}", 
    new { controller = "User", action = "Index"} 
); 

routes.MapRoute(
    "Default", 
    "{*url}", 
    new { controller = "Default", action = "Index" } 
); 

어떻게 사용자 경로가 같은 여분의 쿼리 매개 변수를 허용해야합니까/사용자 이름 심판 = 페이스 북 단지 머리가 경로를 기본값으로이 예 ...

편집 :? MY는 BAD하는이었다 비트는 쿼리 매개 변수에 신경 쓰지 않아도되므로 놀라게됩니다. 해결책 = 프로젝트를 정리하고 다시 빌드하십시오.

답변

0

업데이트 후속으로 첫 번째 경로 : 그것은 MVC가 자동으로 컨트롤러에 쿼리 문자열 "심판"을 통과하도록 컨트롤러 조치에

routes.MapRoute(
    "Users", 
    "/username", 
    new { controller = "User", action = "Index"} 
); 

는 매개 변수 "심판"을 추가합니다.

+0

죄송합니다. 내 잘못입니다! – Simon

0

매개 변수를 경로에 추가하고 작업에 추가해야합니다. 나는 URL의 시작 부분에 무언가를 추가 제안 는 예 그것을 좀 더 구체적인 (경우에 당신은 당신의 프로젝트에 다른 경로를 추가)

routes.MapRoute(
    "Users", 
    "users/{username}/{ref}", 
    new { controller = "User", action = "Index", ref = UrlParameter.Optional } 
); 

를 만들기 위해 당신의 행동에 당신이 원하는 것

?ref= 같은
public ActionResult Index(ref) 
{ 
    if (string.IsNullOrEmpty(ref)) 
    { 
     //TODO: add your logic here 
    } 
} 

이 동의해야 /users/someusername/facebook.com 또는 /users/someusername?ref=facebook.com

0

쿼리 문자열 매개 변수는 경로 세그먼트 정의의 일부가 아닙니다. 예를 들어, 경로 llike는 : /Home/Index?ref=facebook :

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

는 여전히 같은 URL을 일치합니다.

따라서 임시 쿼리 문자열을 수용하기 위해 경로를 변경할 필요가 없습니다. 액션/컨트롤러에서 처리하는 것은 다른 이야기입니다. 구성 가이드 라인을 따르고 CoC 협약을 준수하고 액션의 쿼리 문자열 매개 변수와 일치해야하기 때문입니다.