独自フィルター(カスタムフィルター)を作成、実装することで、各アクションに対して画一的な処理を "簡単に" 施すことができるようになります。 例えば「特定の条件を満たさない場合、実行できなくする」「ユーザーのページ遷移を記録する」「キャッシュを無効化する」といったことができるようになります。
この 独自フィルター の実装方法ですが、通常は FilterAttribute
クラスを継承して作成します。
簡易的に 組込フィルタークラス を継承することでも 独自フィルター を作成できます。
※フィルター の 実行順序 は こちら をご参照ください。
以下では「キャッシュを無効化する独自フィルター」を実装する手順を見ていきます。
実装手順
- 独自フィルター を作成する プロジェクト を選択し、[プロジェクト]-[新しい項目の追加] を選択
- 任意の名前で「クラス」を「追加」
(ここでは NoCacheAttribute としています。)
FilterAttribute
を継承
12public
class
NoCacheAttribute: FilterAttribute
IResultFilter
を実装
(どの インターフェース を実装すべきかの判断は こちら をご参照ください。)
12public
class
NoCacheAttribute: FilterAttribute, IResultFilter
.OnResultExecuted
を実装
1819202122public
void
OnResultExecuted(ResultExecutedContext filterContext)
{
var response = filterContext.HttpContext.Response;
response.Cache.SetCacheability(HttpCacheability.NoCache);
}
.OnResultExecuting
の内容を削除
2829303132public
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 の フォロー」 お願いします!!