: 나는 액션을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
);
당신은 두 번째 매개 변수에 리터럴을 사용할 수 있습니다, 그들은 필터 역할을합니다 :
다시 한 번 혼동을 겪고 있습니다. 멤버가 아닌 사람에게 ID를 사용합니다. – dritterweg
죄송합니다. 수정되었습니다. 요점은 라우팅 클래스가 사용할 라우트를 식별 할 수 있도록 라우트에서 조치를 지정해야한다는 것입니다. 또한 일치하는 첫 번째 경로를 사용하므로 더 구체적인 경로를 먼저 지정해야합니다. –