Tento článek je zrcadlovým článkem o strojovém překladu, klikněte zde pro přechod na původní článek.

Pohled: 14395|Odpověď: 1

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

[Kopírovat odkaz]
Zveřejněno 17.01.2019 16:40:51 | | |
1. Nuget instaluje příslušné dll

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

Dva. Vytvořte nový ActionFilterAttribute a přepsejte příslušné metody

    public class WebApiOutputCacheAttribute : ActionFilterAttribute
    {
        Čas cache/sekunda
        soukromý int _timespan;
        Čas za sekundu klientské cache
        soukromý int _clientTimeSpan;
        Zda je ukládán anonymními uživateli
        Vojína Bool _anonymousOnly;
        Uložte indexový klíč do mezipaměti
        soukromý strunový _cachekey;
        Sklady keše
        soukromý statický readonly ObjectCache WebApiCache = MemoryCache.Default;


        public WebApiOutputCacheAttribute(int timespan, int clientTimeSpan, bool anonymousOnly)
        {
          _timespan = časové období;
          _clientTimeSpan = klientČasObdobí;
          _anonymousOnly = anonymOnly;
        }

//是否缓存
        private bool _isCacheable(HttpActionContext ac)
        {
             pokud (_timespan > 0 & _clientTimeSpan > 0)
             {
                pokud (_anonymousOnly)
                   if (Thread.CurrentPrincipal.Identity.IsAuthenticated)
                         return false;
               pokud (AC. Request.Method == HttpMethod.Get) vrať true;
            }
           jinak
           {
                throw new InvalidOperationException ("Wrong Argument");
           }
            return false;
        }

        private CacheControlHeaderValue setClientCache()
        {
            var cachecontrol = nový CacheControlHeaderValue();
            CacheControl. MaxAge = TimeSpan.OdSeconds(_clientTimeSpan);
            CacheControl. MusíRevalidovat = pravda;
            return cachecontrol;
        }


//Action调用前执行的方法
        veřejné přepsání neplatní OnActionExecuting(HttpActionContext ac)
        {
            pokud (ac != null)
            {
                if (_isCacheable(ac))
                {
                    _cachekey = řetězec. Join(":", nový řetěz[] { ac. Request.RequestUri.AbsolutePath, ac. Request.Headers.Accept.FirstOrDefault(). ToString() });
                    if (WebApiCache.Contains(_cachekey))
                    {
                        var val = (string)WebApiCache.Get(_cachekey);
                        if (val != null)
                        {
                            AC. Odpověď = ac. Request.CreateResponse();
                            AC. Response.Content = nový StringContent(val);
                            var contenttype = (MediaTypeHeaderValue)WebApiCache.Get(_cachekey + ":response-ct");
                            pokud (contenttype == null)
                                contenttype = nový MediaTypeHeaderValue(_cachekey. Split(':')[1]);
                            AC. Response.Content.Headers.ContentType = contenttype;
                            AC. Response.Headers.CacheControl = setClientCache();
                            návrat;
                        }
                    }
                }
            }
            jinak
            {
                throw new ArgumentNullException("actionContext");
            }
        }


//Action调用后执行方法
        veřejné přepsání neplatné OnActionExecuted(HttpActionExecutedContext actionExecutedContext)
        {
            if (!( WebApiCache.Contains(_cachekey)))
            {
                var body = actionExecutedContext.Response.Content.ReadAsStringAsync(). Výsledek;
                WebApiCache.Add(_cachekey, tělo, 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. Kontroler musí přidat cache do metody Get pro přidání filtru

     [WebApiOutputCache(120,60,false)]
        public string GetShoppingCart()
        {
            vrátit "Hello World";
        }
začněme, sledujte bod zlomu a sledujte jeho efekt. Celý proces je: inicializovat filtr cache při startu, poté zavolat metodu Get s přidaným filtrem, zadat metodu OnActionExecuting, zjistit, zda existuje relevantní cache, pokud ano, vrátit výsledek přímo, pokud ne, zavolat Action-Action, a poté zavolat metodu OnActionExecute pro přidání příslušného páru klíč-hodnota cache a nastavit čas expirace cache tak, aby se vrátil výsledek.




Předchozí:Odinstalujte redundantní aplikační nástroj Win10
Další:"CSS World" od Zhang Xinxu azw3+mobi+epub
Zveřejněno 19.01.2019 9:09:45 |
Dobré
Zřeknutí se:
Veškerý software, programovací materiály nebo články publikované organizací Code Farmer Network slouží pouze k učení a výzkumu; Výše uvedený obsah nesmí být používán pro komerční ani nelegální účely, jinak nesou všechny důsledky uživatelé. Informace na tomto webu pocházejí z internetu a spory o autorská práva s tímto webem nesouvisí. Musíte výše uvedený obsah ze svého počítače zcela smazat do 24 hodin od stažení. Pokud se vám program líbí, podporujte prosím originální software, kupte si registraci a získejte lepší skutečné služby. Pokud dojde k jakémukoli porušení, kontaktujte nás prosím e-mailem.

Mail To:help@itsvse.com