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