MVC入門学習ノート(六)


五フィルタFilter
この章では、Filterに関する重典の説明を引用します.
  • ログインの有無またはユーザ権限
  • を判断する.
  • 決定出力キャッシュ
  • 盗難防止チェーン
  • クモ
  • ローカライズと国際化設定
  • 動的Action
  • を実現する.
    FilterはAspで宣言的なプログラミング方式である.NetMVCではAction(またはコントローラ)に限定されます.FilterがActionFilterAttribute抽象クラスに継承するには、void OnActionExecuting(ActionExecutingContext)とvoid OnActionExecuted(ActionExecutedContext)を上書きできます.
    およびvoid OnResultExecuting(ResultExecutingContext)およびvoid OnResultExecuted(ResultExecutedContext)
    OnActionExecutionはAction実行前の操作、OnActionExecutedはAction実行後の操作です
    一方、OnResultExecutionはActionResultを解析する前に実行し、OnResultExecutedはActionResultを解析した後に実行する.

    一、Actionに適用するFilter


    次に例を示します.まず、TestFilterという名前のFilterを作成します.
      public class TestFilter : ActionFilterAttribute
    {
    public override void OnActionExecuting(ActionExecutingContext filterContext)
    {//Action
    filterContext.HttpContext.Session["temp"] += "TestFilter OnActionExecuting<br/>";
    }

    public override void OnActionExecuted(ActionExecutedContext filterContext)
    {//Action
    filterContext.HttpContext.Session["temp"] += "TestFilter OnActionExecuted<br/>";
    }
    public override void OnResultExecuting(ResultExecutingContext filterContext)
    {// ActionResult
    filterContext.HttpContext.Session["temp"] += "TestFilter OnResultExecuting<br/>";
    }

    public override void OnResultExecuted(ResultExecutedContext filterContext)
    {// ActionResult
    filterContext.HttpContext.Session["temp"] += "TestFilter OnResultExecuted<br/>";
    }
    }

    次にアクションを作成します.
            [TestFilter]//  Filter   Action
    public ActionResult filteraction()
    {
    return View();
    }

     
    ビューに次のように書き込みます.
    <%Session["temp"] += "View Execute<br/>"; %>

     
    最後に他のページでSession[temp]の出力結果を得た.
    TestFilter OnActionExecuting
    TestFilter OnActionExecuted
    TestFilter OnResultExecuting
    View Execute
    TestFilter OnResultExecuted

    これにより、これらの実行順序も上記のようになる
     

    二、ControllerのFilter


    FilterをControllerに適用するには2つの方法があります
    1.次のように、Filterを直接Controllerに適用します.
        [TestFilter]
    public class EiceController : Controller
    {
    }

     
    2.Controller内のOnActionExecution/onActionExecuted/onResultExecution/onResultExecutedの4つのメソッドを書き換える.
    いくつかのシステムのFilterについてお話しします

    三、AcceptVerbs


    ページのアクセス形式を指定します.
            [AcceptVerbs(HttpVerbs.Post)]
    public ActionResult Example(){
    return View();
    }

    ページはPost形式でのみアクセスできます.すなわち、フォームのコミットです.

    四、ActionName


    アクションの名前を指定します.
    適用シーン:メソッド名をAction名、またはAction名をキーワードにしたくない場合は、
           [ActionName("class")]
    public ActionResult Example(){
    return View();
    }

     

    五、NonAction


    現在のメソッドは通常のメソッドのみアクションとして解析されません

    六、OutputCache


    Actionのキャッシュの追加
            [OutputCache(Duration = 60, VaryByParam = "*")]
    public ActionResult Example()
    {
    return View();
    }

     

    七、ValidateInput


    このアクションはHtmlなどの危険コードを受け入れることができる(ASP.NET MVCはaspxで<%@Pageの属性を設定して同等のタスクを完了できない.)
            [ValidateInput(false)]
    public ActionResult Example()
    {
    return View();
    }

     

    八、ValidateAntiForgeryTokenAttribute


    サーバの改ざんを検証します.
            [ValidateAntiForgeryToken]
    public ActionResult Example()
    {
    return View();
    }