ここでは、 ASP.NET Web API において、独自フィルター を実装する方法を掲載します。 独自フィルター を実装することで、 RESTful アプリケーション内において、ある決まった処理を簡単に実装することができるようになります。 今回は サンプル として「フィルターを実装したアクション(メソッド)のレスポンスをキャッシュさせない」独自フィルターを作成します。
目次
独自フィルター の 実装手順
- 独自フィルター 用 の クラス を追加すます。
ここでは、Filter フォルダー を作成した後、 右クリック-[追加]-[新しい項目] を選択します。
- [コードファイル] を選択し、 NoCacheFilterAttribute を作成します。
System.Web.Http.Filters.ActionFilterAttribute
を継承します。public class NoCacheFilterAttribute : System.Web.Http.Filters.ActionFilterAttribute
.OnActionExecuting
メソッド を オーバーライドします。public override void OnActionExecuting (HttpActionContext actionContext) { base.OnActionExecuting(actionContext); }
.OnActionExecuted
メソッド を オーバーライドします。public override void OnActionExecuted(HttpActionExecutedContext actionExecutedContext) { base.OnActionExecuted(actionExecutedContext); }
独自フィルター の 実装例
NoCacheFilterAttribute.cs
using System.Net.Http.Headers; using System.Web.Http.Controllers; using System.Web.Http.Filters; /// <summary> /// キャッシュ無効化するフィルター属性 /// </summary> public class NoCacheFilterAttribute : ActionFilterAttribute { /// <summary> /// アクション メソッドの呼び出し前に発生します。 /// </summary> /// <param name="actionContext">アクション実行コンテキスト。</param> public override void OnActionExecuting(HttpActionContext actionContext) { base.OnActionExecuting(actionContext); } /// <summary> /// アクション メソッドの呼び出し後に発生します。 /// </summary> /// <param name="actionExecutedContext">アクション実行コンテキスト。</param> public override void OnActionExecuted(HttpActionExecutedContext actionExecutedContext) { var response = actionExecutedContext.Response; response.Headers.CacheControl = new CacheControlHeaderValue() { NoCache = true }; base.OnActionExecuted(actionExecutedContext); } }
独自フィルター の 利用
CatalogController.cs
public class CatalogController : ApiController { // GET api/catalog/ [NoCacheFilter] public IEnumerable<string> Get() { // 商品一覧を取得する処理を記述... return new string[] { "鉛筆", "ボールペン", "消しゴム" }; } }
今回、以下のサイトを参考にしました。
- waりとnaはてな日記 - ASP.NET MVC4 の Web API を学んでみる その4 ~Filter編
- 松崎 剛 Blog - Web API における操作ごとの制御 (Validation, 認証/権限, Exception 処理 など)
- stackoverflow - ASP.NET Web API ActionFilter example
- MSDN - System.Web.Http.Filters 名前空間
- MSDN - ActionFilterAttribute クラス
最後に… このブログに興味を持っていただけた方は、 ぜひ 「Facebookページ に いいね!」または 「Twitter の フォロー」 お願いします!!