Tento článok je zrkadlovým článkom o strojovom preklade, kliknite sem pre prechod na pôvodný článok.

Pohľad: 14395|Odpoveď: 1

[WebAPI] ASP.Net Výstupné cache v ASP.NET Web API

[Kopírovať odkaz]
Zverejnené 17. 1. 2019 16:40:51 | | |
1. Nuget inštaluje príslušné dll

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

Dva. Vytvorte nový atribút ActionFilterAttribute a prepíšte súvisiace metódy

    public class WebApiOutputCacheAttribute : ActionFilterAttribute
    {
        Čas cache za sekundu
        súkromný int _timespan;
        Čas za sekundu klientskej cache
        súkromný int _clientTimeSpan;
        Či je to uložené anonymnými používateľmi
        súkromný Bool _anonymousOnly;
        Ukladajte indexový kľúč do vyrovnávacej pamäte
        súkromný strunový _cachekey;
        Sklady cache
        súkromný statický readonly ObjectCache WebApiCache = MemoryCache.Default;


        public WebApiOutputCacheAttribute(int timespan, int clientTimeSpan, bool anonymousOnly)
        {
          _timespan = časové rozpätie;
          _clientTimeSpan = clientTimeSpan;
          _anonymousOnly = anonymousOnly;
        }

//是否缓存
        private bool _isCacheable(HttpActionContext ac)
        {
             ak (_timespan > 0 & _clientTimeSpan > 0)
             {
                ak (_anonymousOnly)
                   if (Thread.CurrentPrincipal.Identity.IsAuthenticated)
                         return false;
               Ak (AC. Request.Method == HttpMethod.Get) vráť true;
            }
           else
           {
                throw new InvalidOperationException("Nesprávne argumenty");
           }
            return false;
        }

        private CacheControlHeaderValue setClientCache()
        {
            var cachecontrol = nový CacheControlHeaderValue();
            CacheControl. MaxAge = TimeSpan.OdSekúnd(_clientTimeSpan);
            CacheControl. MustRevalidate = pravda;
            vrátiť cachecontrol;
        }


//Action调用前执行的方法
        public override void OnActionExecuting(HttpActionContext ac)
        {
            ak (ac != null)
            {
                ak (_isCacheable(ac))
                {
                    _cachekey = reťazec. Join(":", nový reťazec[] { ac. Request.RequestUri.AbsolutePath, ac. Request.Headers.Accept.FirstOrDefault(). ToString() });
                    if (WebApiCache.Contains(_cachekey))
                    {
                        var val = (string)WebApiCache.Get(_cachekey);
                        ak (val != null)
                        {
                            AC. Odpoveď = ac. Request.CreateResponse();
                            AC. Response.Content = nový StringContent(val);
                            var contenttype = (MediaTypeHeaderValue)WebApiCache.Get(_cachekey + ":response-ct");
                            ak (contenttype == null)
                                contenttype = nový MediaTypeHeaderValue(_cachekey. Split(':')[1]);
                            AC. Response.Content.Headers.ContentType = contenttype;
                            AC. Response.Headers.CacheControl = setClientCache();
                            návrat;
                        }
                    }
                }
            }
            else
            {
                throw new ArgumentNullException("actionContext");
            }
        }


//Action调用后执行方法
        verejné prepísanie zruší OnActionExecuted(HttpActionExecutedContext actionExecutedContext)
        {
            ak (!( WebApiCache.Contains(_cachekey)))
            {
                var body = actionExecutedContext.Response.Content.ReadAsStringAsync(). Výsledok;
                WebApiCache.Add(_cachekey, telo, DateTime.Now.AddSeconds(_timespan));
                WebApiCache.Add(_cachekey + ":response-ct", actionExecutedContext.Response.Content.Headers.ContentType, DateTime.Now.AddSeconds(_timespan));
            }
            ak (_isCacheable(actionExecutedContext.ActionContext))
                actionExecutedContext.ActionContext.Response.Headers.CacheControl = setClientCache();
        }

    }

3. Kontrolér musí pridať cache do metódy Get na pridanie filtra

     [WebApiOutputCache(120,60,false)]
        public string GetShoppingCart()
        {
            vrátiť "Hello World";
        }
začnite, pozorujte bod zlomu a pozorujte jeho efekt. Celý proces spočíva v tom: inicializovať filter cache pri štarte, potom zavolať metódu Get s pridaným filtrom, zadať metódu OnActionExecuting, zistiť, či existuje relevantná cache, ak áno, vrátiť výsledok priamo, ak nie, zavolať akciu kontroléra a potom zavolať metódu OnActionExecuted na pridanie príslušného páru kľúč-hodnota cache a nastaviť čas expirácie cache na vrátenie výsledku.




Predchádzajúci:Odinštalujte redundantný aplikačný nástroj Win10
Budúci:"CSS World" od Zhang Xinxu azw3+mobi+epub
Zverejnené 19. 1. 2019 9:09:45 |
Dobrý
Vyhlásenie:
Všetok softvér, programovacie materiály alebo články publikované spoločnosťou Code Farmer Network slúžia len na vzdelávacie a výskumné účely; Vyššie uvedený obsah nesmie byť použitý na komerčné alebo nezákonné účely, inak nesú všetky následky používateľmi. Informácie na tejto stránke pochádzajú z internetu a spory o autorské práva s touto stránkou nesúvisia. Musíte úplne vymazať vyššie uvedený obsah zo svojho počítača do 24 hodín od stiahnutia. Ak sa vám program páči, podporte originálny softvér, zakúpte si registráciu a získajte lepšie originálne služby. Ak dôjde k akémukoľvek porušeniu, kontaktujte nás prosím e-mailom.

Mail To:help@itsvse.com