MVCでは、「System.Web.Mvc.Controllerクラスを継承した自作コントローラークラス」がロジックの中核を担います。以下の例はデフォルト生成されたコントロールクラスです。}この例では、単純に"/Home/"にアクセスした場合にViewDataにデータをつめて返すだけの処理を実装しています。MVCの機能であるフィルターを実行する事で実現する事が可能です。Java出身者な人たちには「サーブレットフィルタみたいな奴だよ」とか言えばわかって貰えるかも知れません。やって動作させる?フィルタはコントローラに対して、属性として付与する事が可能です。具体的には以下な感じで付与できます。}この例で、SampleClassFilterはクラス全体に対して付与し、SampleMethodFilterはメソッドに対してのみ付与しています。属性として定義するので、以下のクラスを継承する必要があります。必須クラスFilterAttribute任意クラスIAuthorizationFilter(認証前に処理を追加)IActionFilter(アクション実行前後に処理を追加)IResultFilter(ActionResult#ExecuteResult実行前後に処理を追加)IExceptionFilter(例外発生時の処理を追加)サンプルコードは以下になります。フィルターを「クラスのみ、メソッドのみ」とそれぞれ付与を制御する為には、AttributeUsage属性の引数で制御します。見ていただくとして、複数のFilterが有った場合についてです。実は順番制御の為にSystem.Web.Mvc.FilterAttributeにOrderという拡張ポイントが用意されております。以下はFilterAttributeの実装を抜粋。}Orderの値の大きさによって順序制御をする事になっており、デフォルト値は-1、-1より小さい値を設定すると例外を吐く設定になっています。後で示すサンプルコードをもとに、実際にフィルターを実行した際のログを提示します。HomeController:OnAuthorization()Filter2:OnAuthorization()Filter1:OnAuthorization()HomeController:OnActionExecuting()Filter2:OnActionExecuting()Filter1:OnActionExecuting()//実はここでアクションを実行しているFilter1:OnActionExecuted()Filter2:OnActionExecuted()HomeController:OnActionExecuted()HomeController:OnResultExecuting()Filter2:OnResultExecuting()Filter1:OnResultExecuting()//ここでActionResult#ExecuteResult実行Filter1:OnResultExecuted()Filter2:OnResultExecuted()HomeController:OnResultExecuted()ごらんの通り、値が大きいほど先に実行されるという優先順位になっています。XXXXExecutedメソッドに関しては実行順序が逆になっていますので、その点には気をつける必要があります。