ASP.NET MVC で カスタムフィルター の 実装方法

0 件のコメント

独自フィルター(カスタムフィルター)を作成、実装することで、各アクションに対して画一的な処理を "簡単に" 施すことができるようになります。 例えば「特定の条件を満たさない場合、実行できなくする」「ユーザーのページ遷移を記録する」「キャッシュを無効化する」といったことができるようになります。

この 独自フィルター の実装方法ですが、通常は FilterAttribute クラスを継承して作成します。 簡易的に 組込フィルタークラス を継承することでも 独自フィルター を作成できます。
※フィルター の 実行順序 は こちら をご参照ください。

以下では「キャッシュを無効化する独自フィルター」を実装する手順を見ていきます。

実装手順

  1. 独自フィルター を作成する プロジェクト を選択し、[プロジェクト]-[新しい項目の追加] を選択
  2. 任意の名前で「クラス」を「追加」
    (ここでは NoCacheAttribute としています。)
  3. FilterAttribute を継承
    12
    public class NoCacheAttribute: FilterAttribute
  4. IResultFilter を実装
    (どの インターフェース を実装すべきかの判断は こちら をご参照ください。)
    12
    public class NoCacheAttribute: FilterAttribute, IResultFilter
  5. .OnResultExecuted を実装
    18
    19
    20
    21
    22
    public void OnResultExecuted(ResultExecutedContext filterContext)
    {
        var response = filterContext.HttpContext.Response;
        response.Cache.SetCacheability(HttpCacheability.NoCache);
    }
  6. .OnResultExecuting の内容を削除
    28
    29
    30
    31
    32
    public void OnResultExecuting(ResultExecutingContext filterContext)
    {
        // 処理を行わないので、明示的に処理を削除します。
        ////throw new NotImplementedException();
    }

最終的なソースコード

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
namespace SampleMvcApplication.Controllers
{
    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Web;
    using System.Web.Mvc;
 
    /// <summary>
    /// キャッシュを無効化するフィルター属性を表します。
    /// </summary>
    public class NoCacheAttribute: FilterAttribute, IResultFilter
    {
        /// <summary>
        /// アクション結果の実行後に ASP.NET MVC フレームワークによって呼び出されます。
        /// </summary>
        /// <param name="filterContext">フィルター コンテキスト</param>
        public void OnResultExecuted(ResultExecutedContext filterContext)
        {
            var response = filterContext.HttpContext.Response;
            response.Cache.SetCacheability(HttpCacheability.NoCache);
        }
 
        /// <summary>
        /// アクション結果の実行前に ASP.NET MVC フレームワークによって呼び出されます。
        /// </summary>
        /// <param name="filterContext">フィルター コンテキスト</param>
        public void OnResultExecuting(ResultExecutingContext filterContext)
        {
        }
    }
}

今回、参考にしたサイトは以下の通りです。

最後に… このブログに興味を持っていただけた方は、 ぜひ 「Facebookページ に いいね!」または 「Twitter の フォロー」 お願いします!!