この記事は機械翻訳のミラー記事です。元の記事にジャンプするにはこちらをクリックしてください。

眺める: 14395|答える: 1

[WebAPI] ASP.Net Web APIにおけるキャッシュ出力 ASP.NET

[リンクをコピー]
掲載地 2019/01/17 16:40:51 | | |
1. Nugetが該当するDLLをインストールする

Web API 2 : Install-Package Strathweb.CacheOutput.WebApi2
Web API 1 : Install-Package Strathweb.CacheOutput

2。 新しいActionFilterAttributeを作成し、関連するメソッドを上書きします

    public class WebApiOutputCacheAttribute : ActionFilterAttribute
    {
        キャッシュ時間/秒
        プライベート・インタレント_timespan;
        クライアントキャッシュの時間/秒
        プライベート・イン_clientTimeSpan;
        匿名ユーザーによってキャッシュされているかどうか
        プライベート・ブール_anonymousOnly;
        インデックスキーをキャッシュする
        プライベートストリング_cachekey;
        キャッシュ倉庫
        プライベート静的読み取り専用 ObjectCache WebApiCache = MemoryCache.Default;


        public WebApiOutputCacheAttribute(int timespan, int clientTimeSpan, bool anonymousOnly)
        {
          _timespan = 時間帯;
          _clientTimeSpan = clientTimeSpan;
          _anonymousOnly = 匿名のみ;
        }

//是否缓存
        private bool _isCacheable(HttpActionContext ac)
        {
             もし(_timespan > 0 & & _clientTimeSpan > 0)
             {
                もし(_anonymousOnly)
                   if(Thread.CurrentPrincipal.Identity.IsAuthenticated)
                         Return false;
               もし(ac. Request.Method == HttpMethod.Get) true を返します;
            }
           そうでなければ
           {
                新しいInvalidOperationException("Wrong Arguments");
           }
            Return false;
        }

        private CacheControlHeaderValue setClientCache()
        {
            var cachecontrol = new CacheControlHeaderValue();
            キャッシュコントロール。 MaxAge = TimeSpan.FromSeconds(_clientTimeSpan);
            キャッシュコントロール。 MustRevalidate = true;
            Return CacheControl;
        }


//Action调用前执行的方法
        パブリックオーバーライド void OnActionExecuting(HttpActionContext ac)
        {
            もし(ac != null)ならば
            {
                もし (_isCacheable(ac))
                {
                    _cachekey = 文字列。 Join(":", 新しい文字列[] { ac. リクエスト。リクエスト。Uri.AbsolutePath, ac. Request.Headers.Accept.FirstOrDefault()。 ToString() });
                    if (WebApiCache.Contains(_cachekey))
                    {
                        var val = (string)WebApiCache.Get(_cachekey);
                        もし(val != null)ならば
                        {
                            エアコン。 応答 = ac。 Request.CreateResponse();
                            エアコン。 Response.Content = new StringContent(val);
                            var contenttype = (MediaTypeHeaderValue)WebApiCache.Get(_cachekey + ":response-ct");
                            もし(contenttype == null)
                                contenttype = new MediaTypeHeaderValue(_cachekey。 Split(':')[1]);
                            エアコン。 Response.Content.Headers.ContentType = contentType;
                            エアコン。 Response.Headers.CacheControl = setClientCache();
                            帰還;
                        }
                    }
                }
            }
            そうでなければ
            {
                新しいArgumentNullException("actionContext");
            }
        }


//Action调用后执行方法
        public override void OnActionExecuted(HttpActionExecutedContext actionExecutedContext)
        {
            もし(!( WebApiCache.Contains(_cachekey)))
            {
                var body = actionExecutedContext.Response.Content.ReadAsStringAsync(). 結果;
                WebApiCache.Add(_cachekey、本文、DateTime.Now.AddSeconds(_timespan));
                WebApiCache.Add(_cachekey + ":response-ct", actionExecutedContext.Response.Content.Headers.ContentType, DateTime.Now.AddSeconds(_timespan));
            }
            if (_isCacheable(actionExecutedContext.ActionContext))
                actionExecutedContext.ActionContext.Response.Headers.CacheControl = setClientCache();
        }

    }

3. コントローラがキャッシュをGetメソッドに追加してフィルターを追加する必要があります

     [WebApiOutputCache(120,60,false)]
        パブリック文字列 GetShoppingCart()
        {
            「Hello World」を返す。
        }
始めて、ブレークポイントを観察し、効果を観察します。 全体のプロセスは、起動時にキャッシュフィルターを初期化し、フィルターを追加したGetメソッドを呼び出し、OnActionExecutingメソッドを入力し、関連するキャッシュがあるかどうかを確認し、存在すれば結果を直接返します。なければコントローラーのActionを呼び出し、OnActionExecutedメソッドを呼び出して関連するキャッシュのキー-値ペアを追加し、キャッシュの有効期限を設定して結果を返します。




先の:Windows 10の冗長アプリケーションツールをアンインストールしてください
次に:「CSS World」張新秀著 azw3+mobi+epub
掲載地 2019/01/19 9:09:45 |
よし
免責事項:
Code Farmer Networkが発行するすべてのソフトウェア、プログラミング資料、記事は学習および研究目的のみを目的としています。 上記の内容は商業的または違法な目的で使用されてはならず、そうでなければ利用者はすべての結果を負うことになります。 このサイトの情報はインターネットからのものであり、著作権紛争はこのサイトとは関係ありません。 ダウンロード後24時間以内に上記の内容を完全にパソコンから削除してください。 もしこのプログラムを気に入ったら、正規のソフトウェアを支持し、登録を購入し、より良い本物のサービスを受けてください。 もし侵害があれば、メールでご連絡ください。

Mail To:help@itsvse.com