独自フィルター(カスタムフィルター)を作成、実装することで、各アクションに対して画一的な処理を "簡単に" 施すことができるようになります。 例えば「特定の条件を満たさない場合、実行できなくする」「ユーザーのページ遷移を記録する」「キャッシュを無効化する」といったことができるようになります。
この 独自フィルター の実装方法ですが、通常は FilterAttribute クラスを継承して作成します。
簡易的に 組込フィルタークラス を継承することでも 独自フィルター を作成できます。
※フィルター の 実行順序 は こちら をご参照ください。
以下では「キャッシュを無効化する独自フィルター」を実装する手順を見ていきます。
実装手順
- 独自フィルター を作成する プロジェクト を選択し、[プロジェクト]-[新しい項目の追加] を選択

- 任意の名前で「クラス」を「追加」
(ここでは NoCacheAttribute としています。)

FilterAttributeを継承
public class NoCacheAttribute: FilterAttributeIResultFilterを実装
(どの インターフェース を実装すべきかの判断は こちら をご参照ください。)
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 の フォロー」 お願いします!!