2010-02-23 3 views
1

: 나는 액션을URL 라우팅 매개 변수 이름, 주문이 문제를 해결하기 위해 최선의 방법을 물어

public ActionResult Member(string id){return View();} 

동일한 컨트롤러에서 다른 작업을 다음 한 내 컨트롤러에서

public ActionResult Archive(string year){return View();} 

내 global.asax

routes.MapRoute(
      "Archive",            // Route name 
      "{controller}/{action}/{year}",       // URL with parameters 
      new { controller = "Home", action = "Index", year = "" } // Parameter defaults 
     ); 

routes.MapRoute(
      "Default",            // Route name 
      "{controller}/{action}/{id}",       // URL with parameters 
      new { controller = "Home", action = "Index", id="" } // Parameter defaults 
     ); 

이 url mysite.com/archive/2009를 호출하면 "year"라는 이름의 작업 예상 매개 변수와 첫 번째 경로 스키마가이 요청과 함께 작동하기 때문에 이것이 작동합니다. 하지만이 URL을 mysite.com/member/john이라고하면이 URL은 mysite.com/member?id=john이됩니다. global.asax의 첫 번째 경로가 동일한 구성이지만 다른 매개 변수 이름을 갖고있는 것처럼 보입니다. 올바른 매개 변수 이름을 가진 URL은 올바른 URL (mysite.com/archive/2009)을 가지지 만 다른 매개 변수는 그렇지 않습니다. 이 문제를 어떻게 해결할 수 있습니까? "param"과 같은 일반적인 매개 변수 이름을 예상하도록 경로 테이블을 변경할 수 있지만 "param"작업의 모든 서명을 변경해야하며 매우 설명 적이 지 않습니다 (param 대신 year 또는 param 대신 id).

routes.MapRoute(
      "Archive",            // Route name 
      "Home/Member/{id}",       // URL with parameters 
      new { controller = "Home", action = "Member", id = "" } // 
Parameter defaults 
     ); 

routes.MapRoute(
      "Archive",            // Route name 
      "{controller}/{action}/{year}",       // URL with parameters 
      new { controller = "Home", action = "Index", year = "" } // Parameter defaults 
     ); 

당신은 두 번째 매개 변수에 리터럴을 사용할 수 있습니다, 그들은 필터 역할을합니다 :

답변

0

이 시도해보십시오. 경로가 더 구체적 일수록 경로 구성의 상단에 더 가까이 위치시켜야 할 때가 있습니다. 라우팅 시스템은 일치하는 첫 번째 경로를 선택합니다.

자세한 배경 정보는 link입니다. 기사가 작성 되었기 때문에 일부 구문이 변경되었지만 기본 규칙이 최신으로 보입니다.

+0

다시 한 번 혼동을 겪고 있습니다. 멤버가 아닌 사람에게 ID를 사용합니다. – dritterweg

+0

죄송합니다. 수정되었습니다. 요점은 라우팅 클래스가 사용할 라우트를 식별 할 수 있도록 라우트에서 조치를 지정해야한다는 것입니다. 또한 일치하는 첫 번째 경로를 사용하므로 더 구체적인 경로를 먼저 지정해야합니다. –

관련 문제