Tämä artikkeli on konekäännöksen peiliartikkeli, klikkaa tästä siirtyäksesi alkuperäiseen artikkeliin.

Näkymä: 14395|Vastaus: 1

[WebAPI] ASP.Net Tulostusvälimuisti ASP.NET Web API:ssa

[Kopioi linkki]
Julkaistu 17.1.2019 16.40.51 | | |
1. Nuget asentaa asiaankuuluvan dll:n

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

Kaksi. Luo uusi ActionFilterAttribute ja ohita siihen liittyvät metodit

    public class WebApiOutputCacheAttribute : ActionFilterAttribute
    {
        Välimuistiaika/sekunti
        yksityinen int _timespan;
        Asiakasvälimuistin aika/sekunti
        yksityinen int _clientTimeSpan;
        Onko se välimuistissa anonyymien käyttäjien toimesta
        sotamies Bool _anonymousOnly;
        Välimuisti indeksiavain
        yksityinen jousi_cachekey;
        Kätkövarastot
        yksityinen staattinen lukuvakituinen ObjectCache WebApiCache = MemoryCache.Default;


        public WebApiOutputCacheAttribute(int timespan, int clientTimeSpan, bool anonymousOnly)
        {
          _timespan = aikaväli;
          _clientTimeSpan = clientTimeSpan;
          _anonymousOnly = anonyymiOnly;
        }

//是否缓存
        private bool _isCacheable(HttpActionContext ac)
        {
             jos (_timespan > 0 && _clientTimeSpan > 0)
             {
                jos (_anonymousOnly)
                   if (Thread.CurrentPrincipal.Identity.IsAuthenticated)
                         palauta väärin;
               jos (ac. Request.Method == HttpMethod.Get) palauttaa true;
            }
           else
           {
                heittää uuden InvalidOperationException("Väärät argumentit");
           }
            palauta väärin;
        }

        yksityinen CacheControlHeaderValue setClientCache()
        {
            var cachecontrol = uusi CacheControlHeaderValue();
            Välimuistikontrolli. MaxAge = TimeSpan.FromSeconds(_clientTimeSpan);
            Välimuistikontrolli. MustRevalidate = totta;
            return cachecontrol;
        }


//Action调用前执行的方法
        public override void OnActionExecuting(HttpActionContext ac)
        {
            jos (ac != null)
            {
                if (_isCacheable(ac))
                {
                    _cachekey = merkkijono. Join(":", new string[] { ac. Request.RequestUri.AbsolutePath, ac. Request.Headers.Accept.FirstOrDefault(). ToString() });
                    if (WebApiCache.Contains(_cachekey))
                    {
                        var val = (string)WebApiCache.Get(_cachekey);
                        jos (val != null)
                        {
                            Ilmastointi. Vaste = ac. Request.CreateResponse();
                            Ilmastointi. Response.Content = uusi StringContent(val);
                            var contenttype = (MediaTypeHeaderValue)WebApiCache.Get(_cachekey + ":response-ct");
                            if (contenttype == null)
                                contenttype = uusi MediaTypeHeaderValue(_cachekey. Split(':')[1]);
                            Ilmastointi. Response.Content.Headers.ContentType = contenttype;
                            Ilmastointi. Response.Headers.CacheControl = setClientCache();
                            paluuta;
                        }
                    }
                }
            }
            else
            {
                heittää uuden ArgumentNullException("actionContext");
            }
        }


//Action调用后执行方法
        public override void OnActionExecuted(HttpActionExecutedContext actionExecutedContext)
        {
            jos (!( WebApiCache.Contains(_cachekey)))
            {
                var body = actionExecutedContext.Response.Content.ReadAsStringAsync(). Tulos;
                WebApiCache.Add(_cachekey, runko, 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. Ohjaimen täytyy lisätä välimuisti Get-metodiin lisätäkseen suodattimen

     [WebApiOutputCache(120,60,väärin)]
        julkinen merkkijono GetShoppingCart()
        {
            palaa "Hello World";
        }
Aloita, tarkkaile katkeamispistettä ja seuraa vaikutusta. Koko prosessi on: alusta välimuistisuodatin käynnistyksessä ja kutsu sitten Get-metodi suodattimen lisättynä, syötä OnActionExecuting-metodi, määritä onko olemassa relevantti välimuisti, jos on, palauta tulos suoraan, jos ei, kutsu ohjaimen Action, ja kutsu sitten OnActionExecuted-metodi lisätäksesi sopivan välimuisti-avain-arvoparin ja asettaa välimuistin vanhenemisaika palauttamaan tulos.




Edellinen:Poista win10:n redundanttisovellustyökalu
Seuraava:"CSS World" kirjoittanut Zhang Xinxu azw3+mobi+epub
Julkaistu 19.1.2019 9.09.45 |
Hyvä
Vastuuvapauslauseke:
Kaikki Code Farmer Networkin julkaisemat ohjelmistot, ohjelmamateriaalit tai artikkelit ovat tarkoitettu vain oppimis- ja tutkimustarkoituksiin; Yllä mainittua sisältöä ei saa käyttää kaupallisiin tai laittomiin tarkoituksiin, muuten käyttäjät joutuvat kantamaan kaikki seuraukset. Tämän sivuston tiedot ovat peräisin internetistä, eikä tekijänoikeuskiistat liity tähän sivustoon. Sinun tulee poistaa yllä oleva sisältö kokonaan tietokoneeltasi 24 tunnin kuluessa lataamisesta. Jos pidät ohjelmasta, tue aitoa ohjelmistoa, osta rekisteröityminen ja hanki parempia aitoja palveluita. Jos rikkomuksia ilmenee, ota meihin yhteyttä sähköpostitse.

Mail To:help@itsvse.com