Ta članek je zrcalni članek strojnega prevajanja, kliknite tukaj za skok na izvirni članek.

Pogled: 14395|Odgovoriti: 1

[WebAPI] ASP.Net Izhodno predpomnjenje v ASP.NET Web API-ju

[Kopiraj povezavo]
Objavljeno na 17. 01. 2019 16:40:51 | | |
1. Nuget namesti ustrezni dll

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

Dva. Ustvarite nov atribut ActionFilterAttribute in preglasite povezane metode

    javni razred WebApiOutputCacheAttribute : ActionFilterAttribute
    {
        Čas predpomnilnika na sekundo
        vojakov Int _timespan;
        Čas/sekunda odjemalskega predpomnilnika
        zasebni int _clientTimeSpan;
        Ali jo anonimni uporabniki shranjujejo v predpomnilniku
        zasebni Bool _anonymousOnly;
        Predpomniš indeksni ključ
        zasebni strunski _cachekey;
        Skladišča predpomnilnika
        zasebni statični readonly ObjectCache WebApiCache = MemoryCache.Default;


        public WebApiOutputCacheAttribute(int timespan, int clientTimeSpan, bool anonymousOnly)
        {
          _timespan = časovno obdobje;
          _clientTimeSpan = clientTimeSpan;
          _anonymousOnly = anonymousOnly;
        }

//是否缓存
        private bool _isCacheable(HttpActionContext ac)
        {
             če (_timespan > 0 & _clientTimeSpan > 0)
             {
                če (_anonymousOnly)
                   if (Thread.CurrentPrincipal.Identity.IsAuthenticated)
                         return false;
               če (AC. Request.Method == HttpMethod.Get) vrni true;
            }
           else
           {
                throw new InvalidOperationException("Napačni argumenti");
           }
            return false;
        }

        private CacheControlHeaderValue setClientCache()
        {
            var cachecontrol = novi CacheControlHeaderValue();
            Nadzor predpomnilnika. MaxAge = Časovni razpon.OdSekund(_clientTimeSpan);
            Nadzor predpomnilnika. MustRevalidate = resnično;
            vrni nadzor predpomnilnika;
        }


//Action调用前执行的方法
        public override void OnActionExecuting(HttpActionContext ac)
        {
            če (ac != ničl)
            {
                if (_isCacheable(ac))
                {
                    _cachekey = niz. Join(":", nova struna[] { ac. Request.RequestUri.AbsolutePath, ac. Request.Headers.Accept.FirstOrDefault(). ToString() });
                    if (WebApiCache.Contains(_cachekey))
                    {
                        var val = (string)WebApiCache.Get(_cachekey);
                        če (val != ničl)
                        {
                            AC. Odziv = ac. Request.CreateResponse();
                            AC. Response.Content = nov StringContent(val);
                            var contenttype = (MediaTypeHeaderValue)WebApiCache.Get(_cachekey + ":response-ct");
                            if (contenttype == null)
                                contenttype = novi MediaTypeHeaderValue(_cachekey. Split(':')[1]);
                            AC. Response.Content.Headers.ContentType = contenttype;
                            AC. Response.Headers.CacheControl = setClientCache();
                            vrnitev;
                        }
                    }
                }
            }
            else
            {
                throw new ArgumentNullException("actionContext");
            }
        }


//Action调用后执行方法
        javno preglasitev razveljavi OnActionExecuted(HttpActionExecutedContext actionExecutedContext)
        {
            če (!( WebApiCache.Contains(_cachekey)))
            {
                var body = actionExecutedContext.Response.Content.ReadAsStringAsync(). Rezultat;
                WebApiCache.Add(_cachekey, telo, 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. Krmilnik mora dodati predpomnilnik metodi Get za dodajanje filtra

     [WebApiOutputCache(120,60,false)]
        javni niz GetShoppingCart()
        {
            vrnil "Hello World";
        }
Začni, opazuj prelomno točko in opazuj učinek. Celoten postopek je: ob zagonu inicializiraj filter predpomnilnika, nato pokličeš metodo Get z dodanim filtrom, vneseš metodo OnActionExecuting, ugotoviš, ali obstaja relevanten predpomnilnik, če obstaja, vrneš rezultat neposredno, če ne, pokličeš Action-kontrolerjev Action, nato pokličeš metodo OnActionExecute za dodajanje ustreznega para ključ-vrednost predpomnilnika in nastaviš čas poteka predpomnilnika, da vrne rezultat.




Prejšnji:Odstrani odvečno aplikacijsko orodje Win10
Naslednji:"CSS World" avtorja Zhang Xinxu azw3+mobi+epub
Objavljeno na 19. 01. 2019 09:09:45 |
Dobro
Disclaimer:
Vsa programska oprema, programski materiali ali članki, ki jih izdaja Code Farmer Network, so namenjeni zgolj učnim in raziskovalnim namenom; Zgornja vsebina ne sme biti uporabljena v komercialne ali nezakonite namene, sicer uporabniki nosijo vse posledice. Informacije na tej strani prihajajo z interneta, spori glede avtorskih pravic pa nimajo nobene zveze s to stranjo. Zgornjo vsebino morate popolnoma izbrisati z računalnika v 24 urah po prenosu. Če vam je program všeč, podprite pristno programsko opremo, kupite registracijo in pridobite boljše pristne storitve. Če pride do kakršne koli kršitve, nas prosimo kontaktirajte po elektronski pošti.

Mail To:help@itsvse.com