내가 좋아하는 설정 경로가 있습니다MVC 라우팅 제약
context.MapRoute(
name: "Area",
url: "Area/{controller}/{action}",
defaults: new
{
controller = "Home",
action = "Dashboard"
}
);
context.MapRoute(
name: "AccountArea",
url: "Area/{accountFriendlyId}/{controller}/{action}",
defaults: new
{
controller = "Home",
action = "Dashboard",
accountFriendlyId = RouteParameter.Optional
}
);
context.MapRoute(
name: "AccountCampaignArea",
url: "Area/{accountFriendlyId}/{campaignFriendlyId}/{controller}/{action}",
defaults: new
{
controller = "Home",
action = "Dashboard",
accountFriendlyId = RouteParameter.Optional,
campaignFriendlyId = RouteParameter.Optional
}
);
을 내가 Area/friendlyAccountName/Home
이 Dashboard()
에 데려다 가지고 불타는 욕망을 가지고 있지만이 (404)를 작동하지 않습니다. 그 이유는 friendlyAccountName 컨트롤러를 찾는 것입니다.
내 컨트롤러 중 하나가 고장 난 후 계정 이름을 지정해야한다면, 해당 컨트롤러를 찾지 못한 문자열의 경우 다음 경로로 넘어갈 수있는 방법이 있습니까? 리플렉션을 사용하고 컨트롤러 목록을 수정할 때마다 제약 조건을 유지하지 않는 방법이 있습니까?
편집
당신은 반사를 사용하지 않는 방법을 알고 있거나 적어도이 지역에 파생 형 검색을 포함 하는가? 두 번째 라우트 매개 변수가 컨트롤러 이름과 일치 할 때 두 번 오버 헤드가 발생한다는 생각이 맘에 들지 않습니다 (통과 제약 조건, 컨트롤러 구성시 다시 검색). 컨트롤러를 생성 한 다음 백업하고 다음 경로로 넘어가는 시점에서 예외를 잡을 수있는 방법이 있었으면 좋겠습니다.
를 처음 두 노선이 없으면,'아르곤 ea/Controller/Action'은 친숙한 id 매개 변수를 채우고 기본 컨트롤러와 액션으로 나를 보내고'Area/friendly/Controller/Action'은 실패합니다. –
아, 미안하지만,'{accountFriendlyId}' 유효한 작업 이름이됩니다. 나는 대답을 업데이트 할 것이다. –
이 문자열을 구문 분석하는 방법은 무엇입니까? 나는 당신이 문자 그대로 인라인으로 그것을 할 수 있다는 단서를 가지고 있지 않았다. (나는 이것을 특별히 사용하지 않을 것이다.) –