2012-04-03 5 views
1

私のコントローラのコンストラクタには、ユーザがサインインされているときにのみ動作するコードがあります。コントローラを[Authorize]としてマークしていますか、または以下をglobal.asax(MVC4)に追加しました:なぜ匿名ユーザーは[Authorize]と記されたコントローラを構築していますか?

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とマークされているコントローラーでアクションを呼び出そうとすると、コントローラーを作成する必要があります。ユーザーが承認された後にのみ行う必要がある初期化コードがある場合は、コンストラクターではなくユーザーを承認するアクションでそのコードを実行する必要があります。

関連する問題