MVC3 サイトに非常に基本的なログイン スキームを実装しようとしています。私の理解が正しければ、 [Authorize] マークアップを各コントローラー クラスに追加する代わりに、単純にグローバル設定を実装できるはずです。これを実現するために、global.asax に以下を追加しました。
protected void Application_Start()
{
RegisterGlobalFilters(GlobalFilters.Filters);
}
public static void RegisterGlobalFilters(GlobalFilterCollection filters)
{
filters.Add(new AuthorizeAttribute());
}
そして私のwebconfigに、次を追加しました:
<authentication mode="Forms">
<forms loginUrl="~/Account/LogOn" timeout="2880" />
</authentication>
その結果、結果のページは完全に空白になります。URLを見ると、ページが空であることを除いて、mvcが期待どおりにログインルートにリダイレクトしているようです。global.asax のコードをコメント アウトし、[Authorize] マークアップを各コントローラーに直接配置すると、期待どおりに動作します。
回避策として、私が読んだ MVC2 のベスト プラクティスを実装しました。つまり、BaseController:Controller クラスを作成し、それに [Authorize] マークアップを追加してから、すべてのコントローラーの固有性を継承するように変更します。コントローラーの代わりにベースコントローラー。
それは今のところ十分に機能しているようです。
しかし、global.asax の実装が機能しないのはなぜでしょうか?