Acest articol este un articol oglindă al traducerii automate, vă rugăm să faceți clic aici pentru a sări la articolul original.

Vedere: 14395|Răspunde: 1

[WebAPI] ASP.Net Cache de ieșire în API-ASP.NET web

[Copiază linkul]
Postat pe 17.01.2019 16:40:51 | | |
1. Nuget instalează DLL-ul relevant

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

Doi. Creează un nou ActionFilterAttribute și înlocuiește metodele aferente

    clasa publică WebApiOutputCacheAttribute : ActionFilterAttribute
    {
        Timp cache/secundă
        Private Int _timespan;
        Timp de cache al clientului/secundă
        private Int _clientTimeSpan;
        Dacă este stocată în cache de utilizatori anonimi
        soldat Bool _anonymousOnly;
        Stochează în cache cheia index
        _cachekey de șir privat;
        Depozite de cache
        privat static readonly ObiectCache WebApiCache = MemoryCache.Default;


        public WebApiOutputCacheAttribute(int timespan, int clientTimeSpan, bool anonymousOnly)
        {
          _timespan = interval de timp;
          _clientTimeSpan = clientTimeSpan;
          _anonymousOnly = anonimOnly;
        }

//是否缓存
        bool privat _isCacheable(HttpActionContext ac)
        {
             dacă (_timespan > 0 & _clientTimeSpan > 0)
             {
                dacă (_anonymousOnly)
                   if (Thread.CurrentPrincipal.Identity.IsAuthenticated)
                         returnează false;
               dacă (ac. Request.Method == HttpMethod.Get) returnează true;
            }
           altfel
           {
                aruncă un nou InvalidOperationException ("Argumente greșite");
           }
            returnează false;
        }

        private CacheControlHeaderValue setClientCache()
        {
            var cachecontrol = new CacheControlHeaderValue();
            Cachecontrol. MaxAge = TimeSpan.FromSeconds(_clientTimeSpan);
            Cachecontrol. MustRevalidate = adevărat;
            returnează controlul cache-ului;
        }


//Action调用前执行的方法
        public override void OnActionExecuting(HttpActionContext ac)
        {
            dacă (ac != nul)
            {
                dacă (_isCacheable(ac))
                {
                    _cachekey = șnur. Join(":", new string[] { ac. Request.RequestUri.AbsolutePath, ac. Request.Headers.Accept.FirstOrDefault(). ToString() });
                    if (WebApiCache.Contains(_cachekey))
                    {
                        var val = (string)WebApiCache.Get(_cachekey);
                        dacă (val != nul)
                        {
                            AC. Răspuns = ac. Request.CreateResponse();
                            AC. Response.Content = nou StringContent(val);
                            var contenttype = (MediaTypeHeaderValue)WebApiCache.Get(_cachekey + ":response-ct");
                            if (contenttype == null)
                                contenttype = noul MediaTypeHeaderValue(_cachekey. Split(':')[1]);
                            AC. Response.Content.Headers.ContentType = contenttype;
                            AC. Response.Headers.CacheControl = setClientCache();
                            returnare;
                        }
                    }
                }
            }
            altfel
            {
                aruncă un nou ArgumentNullException ("actionContext");
            }
        }


//Action调用后执行方法
        public override void OnActionExecuted(HttpActionExecutedContext actionExecutedContext)
        {
            dacă (!( WebApiCache.Contains(_cachekey)))
            {
                var body = actionExecutedContext.Response.Content.ReadAsStringAsync(). Rezultat;
                WebApiCache.Add(_cachekey, corp, 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. Controlerul trebuie să adauge cache-ul la metoda Get pentru a adăuga filtrul

     [WebApiOutputCache(120,60,false)]
        șirul public GetShoppingCart()
        {
            returnează "Hello World";
        }
Începe, observă punctul de întrerupere și observă efectul. Întregul proces este: inițializează filtrul cache-ului la pornire, apoi apelează metoda Get cu filtrul adăugat, intră în metoda OnActionExecuting, determină dacă există un cache relevant, dacă există, returnează rezultatul direct, dacă nu, apelează Action-ul controlerului, apoi apelează metoda OnActionExecuted pentru a adăuga perechea cheie-valoare cache relevantă și setează timpul de expirare al cache-ului pentru a returna rezultatul.




Precedent:Desinstalează aplicația redundantă win10
Următor:"CSS World" de Zhang Xinxu azw3+mobi+epub
Postat pe 19.01.2019 09:09:45 |
Bun
Disclaimer:
Tot software-ul, materialele de programare sau articolele publicate de Code Farmer Network sunt destinate exclusiv scopurilor de învățare și cercetare; Conținutul de mai sus nu va fi folosit în scopuri comerciale sau ilegale, altfel utilizatorii vor suporta toate consecințele. Informațiile de pe acest site provin de pe Internet, iar disputele privind drepturile de autor nu au legătură cu acest site. Trebuie să ștergi complet conținutul de mai sus de pe calculatorul tău în termen de 24 de ore de la descărcare. Dacă îți place programul, te rugăm să susții software-ul autentic, să cumperi înregistrarea și să primești servicii autentice mai bune. Dacă există vreo încălcare, vă rugăm să ne contactați prin e-mail.

Mail To:help@itsvse.com