2011-12-06 2 views
1

내 문제를 설명 할 때 어떤 제목을 사용해야하는지 정말 모르겠다. 내 문제를 단순화합니다. 여기에 내 시험이있다. 나는 처음부터 mvc3 사이트를 만듭니다. 그런 다음 "admin"이라는 영역을 추가합니다. admin 내부에는 "Search"라는 컨트롤러가 있고 "Authorize"속성이 있습니다. 그런 다음 Global.ascx.cs 경로 설정을 변경하여 컨트롤러 네임 스페이스를 추가했습니다. 이제 시험을 시작합니다.MVC3 영역 + 권한 부여 + 역할 이상한 문제

1

내가 http://localhost:xxx/Search 페이지로 접근하고, 그것을 다시/계정/로그온 페이지로 저를 리디렉션 질문, 그것은 페이지를 로그온 저를 리디렉션 왜 나를 먼저 혼동하게? 내가 아는 한 Admin 검색 컨트롤러에 전혀 접근해서는 안됩니다. Authorize 속성을 제거하면 예상대로보기를 찾을 수 없다는 노란색 화면이 표시됩니다.

질문 2

나는 권한 부여 역할, 예를 들어,와 속성을 추가하는 경우 (Roles = "Admin"), 검색 페이지에 다시 액세스 할 수 있습니다. 로그인 성공 여부와 관계없이 항상 로그온 페이지로 리디렉션됩니다. 내가 노란 화면을주지 않는 이유는 무엇입니까? 관리자 영역이 아닌 주 사이트에서 검색 컨트롤러 색인보기를 요청하려고합니다. 꽤 혼란 스럽네.

저는 MVC 개발의 초보자입니다. 누군가 내 문제와 관련하여 해결책을 줄 수 있습니까?

감사

Global.ascx.cs

 public static void RegisterRoutes(RouteCollection routes) { 
     routes.IgnoreRoute("{resource}.axd/{*pathInfo}"); 

     routes.MapRoute(
      "Default", // Route name 
      "{controller}/{action}/{id}", // URL with parameters 
      new { controller = "Home", action = "Index", id = UrlParameter.Optional },      
      new string[]{"TestAreaRouting.Controllers"} 
     ); 

     } 

답변

1

당신은에 UseNamespaceFallback 데이터 토큰을 설정하여 Global.asaxRegisterRoutes 방법 컨트롤러는 지정된 네임 스페이스 내에서보고 기본 컨트롤러 공장을 제한 할 수 false :

public static void RegisterRoutes(RouteCollection routes) 
{ 
    routes.IgnoreRoute("{resource}.axd/{*pathInfo}"); 

    routes.MapRoute(
     "Default", 
     "{controller}/{action}/{id}", 
     new { controller = "Home", action = "Index", id = UrlParameter.Optional }, 
     new string[] { "TestAreaRouting.Controllers" } 
    ).DataTokens["UseNamespaceFallback"] = false; 
} 

/search을 요청하면 URL이 Admin 접두사로 시작하지 않기 때문에 admin 영역 경로가 일치하지 않습니다.

그래서 일치하는 기본 경로입니다. 기본 컨트롤러 팩토리는 Controller에서 파생 된 SearchController이라는 클래스에 대한 어셈블리 검색을 시작하고 인스턴스를 찾은 다음이를 사용하여 요청을 처리합니다. 분명히 존재하지 않는 ~/Views/Search/Index.cshtml에서 보이기 때문에 분명히 해당 인덱스 뷰를 찾지 못합니다. 실제보기는 해당 지역에 있습니다.

이제 컨트롤러를 각각의 위치로 제한 했으므로 Authorize 특성을 사용하여 컨트롤러를 꾸밀 수 있으며 일관되게 동작해야합니다.

+0

귀하의 설명에 감사드립니다. 그러나 나는 아직도 그것을 혼동한다. 먼저 authorize 속성을 제거하면 관리 영역 내의 검색 컨트롤러를 검사하지 않는 이유를 설명 할 수 있습니까? – Vincent

+0

@Vincent, 제안 된 코드가 도움이되지 않습니까? 무엇에 대해 특히 혼란 스럽습니까? –

+0

어쨌든 다린, 기회가 있다면 내 다른 질문을 설명하는 데 도움이 될 수 있습니까? http://stackoverflow.com/questions/8219347/asp-net-mvc-allowhtml-bug-or-something-i-didnt-use- 정확하게 – Vincent

관련 문제