2012-04-03 3 views
1

내 컨트롤러의 생성자에 사용자가 로그인 할 때만 작동하는 일부 코드가 있습니다. 컨트롤러를 [Authorize]로 표시했거나 다음을 global.asax (MVC4)에 추가했습니다.왜 [익명]으로 표시된 컨트롤러를 익명 사용자가 구성합니까?

public static void RegisterGlobalFilters(GlobalFilterCollection filters) 
{ 
    filters.Add(new HandleErrorAttribute()); 
    filters.Add(new System.Web.Mvc.AuthorizeAttribute()); 
} 

그러나 내 컨트롤러가 여전히 만들어지고 있으므로 예외가 발생하고 있습니다. 디자인에 의한 것입니까, 아니면 잘못 설정된 것입니까? 보호 된 컨트롤러를 만들지 않고 로그인 루트/페이지로 사용자를 보내고 권한을 부여하고 싶습니다.

+0

어떤 예외입니까? – jrummell

답변

4

프레임 워크는 컨트롤러를 만든 후에야 속성을 읽을 수 있습니다. 따라서 Authorize는 호출 할 객체가있을 때까지 호출되지 않습니다.

4

컨트롤러는 (Authorize과 같은) 특성을 검사하기 전에 (ControllerFactory) 작성해야합니다. 따라서 익명 사용자가 Authorize으로 표시된 컨트롤러에서 작업을 호출하려고하면 컨트롤러를 만들어야합니다. 사용자가 권한을 부여한 후에 만 ​​수행해야하는 초기화 코드가있는 경우 생성자가 아니라 사용자를 승인하는 작업에서 수행해야합니다.

관련 문제