ASP.NET Web API で 独自 フィルター の実装方法

0 件のコメント

ここでは、 ASP.NET Web API において、独自フィルター を実装する方法を掲載します。 独自フィルター を実装することで、 RESTful アプリケーション内において、ある決まった処理を簡単に実装することができるようになります。 今回は サンプル として「フィルターを実装したアクション(メソッド)のレスポンスをキャッシュさせない」独自フィルターを作成します。

目次

独自フィルター の 実装手順

  1. 独自フィルター 用 の クラス を追加すます。
    ここでは、Filter フォルダー を作成した後、 右クリック-[追加]-[新しい項目] を選択します。
  2. [コードファイル] を選択し、 NoCacheFilterAttribute を作成します。
  3. System.Web.Http.Filters.ActionFilterAttribute を継承します。
    1
    public class NoCacheFilterAttribute : System.Web.Http.Filters.ActionFilterAttribute
  4. .OnActionExecuting メソッド を オーバーライドします。
    1
    2
    3
    4
    public override void OnActionExecuting (HttpActionContext actionContext)
    {
        base.OnActionExecuting(actionContext);
    }
  5. .OnActionExecuted メソッド を オーバーライドします。
    1
    2
    3
    4
    public override void OnActionExecuted(HttpActionExecutedContext actionExecutedContext)
    {
        base.OnActionExecuted(actionExecutedContext);
    }

独自フィルター の 実装例

NoCacheFilterAttribute.cs

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
33
34
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

1
2
3
4
5
6
7
8
9
10
11
public class CatalogController : ApiController
{
    // GET api/catalog/
    [NoCacheFilter]
    public IEnumerable<string> Get()
    {
        // 商品一覧を取得する処理を記述...
 
        return new string[] { "鉛筆", "ボールペン", "消しゴム" };
    }
}

今回、以下のサイトを参考にしました。

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