2010-04-10 2 views
1

하나의 영역이 있고 AreaRegistration에 네임 스페이스를 정의했습니다. 영역의 모든 컨트롤러가 속합니다.컨트롤러를 특정 영역에만 제한

context.MapRoute(
       "Admin_default", 
       "Admin/{controller}/{action}/{id}", 
       new { controller="Home", action = "Index", id = UrlParameter.Optional }, 
       new[] { "MySite.Admin.Controllers" }    // Namespaces 
      ); 

해당 경로가 일치하지 않아도 해당 영역의 컨트롤러가 호출되는 것을 방지하는 방법. I.E./home/index (처음에는 "admin"단어 제외).

예 : 영역 루트에 속하는 컨트롤러가 "MySite.Admin.Controllers.HomeController는"위에서 정의 된 경우

. 컨트롤러 팩토리가 경로 "Admin/{controller}/{action}/{id}"(끝에있는 "Admin")과 일치하지 않으면 해당 컨트롤러를 검색 (즉, 예외 예외)하는 것을 금지하고 싶습니다. "home/index"를 입력하면 (처음에는 "Admin"이 표시되지 않음) 웹 사이트에서 컨트롤러를 찾을 수 없다는 오류가 발생합니다.

희망은 분명했습니다.

+0

죄송합니다. 질문을 이해할 수 없으므로 예제를 제공해 주시겠습니까? –

답변

2

영역과 일치하는 제약 조건을 추가하십시오!

Here은 경로 제약 조건에 대한 유용한 정보입니다.

당신이 사용자 정의 경로 제약 조건을 작성하려는 경우

는, 다음주는

http://blogs.microsoft.co.il/blogs/bursteg/archive/2009/01/11/asp-net-mvc-route-constraints.aspx

편집 읽기 다음

기본 경로를 제거하고 있는지 모든 것을 할이 영역에 속합니다 , 집/인덱스는 영역으로 범위 지정되지 않으므로 예외를 throw합니다.

+0

이렇게하면 내가 가장 일치하는 경로를 탐지 할 수있게되지만 컨트롤러 팩토리가 특정 영역 아래 컨트롤러를 찾지 못하도록합니다. –

+0

이 기본 경로를 제거하면 문제가 해결되지만 이것이 우수 사례인지 궁금합니다. –

+0

틀림없이 프레임 워크에서 해킹하지 않는 것은 좋지 않습니다. 필요에 맞게 경로를 구성하는 것입니다. 바로 그 것입니다. :) –

관련 문제