Denna artikel är en spegelartikel om maskinöversättning, klicka här för att hoppa till originalartikeln.

Utsikt: 14395|Svar: 1

[WebAPI] ASP.Net Utdatacaching i ASP.NET Web API

[Kopiera länk]
Publicerad på 2019-01-17 16:40:51 | | |
1. Nuget installerar relevant dll

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

Två. Skapa ett nytt ActionFilterAttribute och åsidosätt de relaterade metoderna

    public class WebApiOutputCacheAttribute : ActionFilterAttribute
    {
        Cachetid/sekund
        privat int _timespan;
        Klientcachetid/sekund
        privat int _clientTimeSpan;
        Om den är cachad av anonyma användare
        Private Bool _anonymousOnly;
        Cache indexnyckeln
        privat sträng _cachekey;
        Cachelager
        privat statisk readonly ObjectCache WebApiCache = MemoryCache.Default;


        public WebApiOutputCacheAttribute(int timespan, int clientTimeSpan, bool anonymousOnly)
        {
          _timespan = tidsspann;
          _clientTimeSpan = clientTimeSpan;
          _anonymousOnly = anonymEndast anonym;
        }

//是否缓存
        private bool _isCacheable(HttpActionContext ac)
        {
             om (_timespan > 0 & _clientTimeSpan > 0)
             {
                om (_anonymousOnly)
                   if (Thread.CurrentPrincipal.Identity.IsAuthenticated)
                         returnera falsk;
               Om (AC. Request.Method == HttpMethod.Get) returnerar true;
            }
           annars
           {
                kasta ny InvalidOperationException("Wrong Arguments");
           }
            returnera falsk;
        }

        privat CacheControlHeaderValue setClientCache()
        {
            var cachecontrol = ny CacheControlHeaderValue();
            cachekontroll. MaxAge = TimeSpan.FromSeconds(_clientTimeSpan);
            cachekontroll. MåOmvalidera = sant;
            returnera cachekontroll;
        }


//Action调用前执行的方法
        public override void OnActionExecuting(HttpActionContext ac)
        {
            om (ac != null)
            {
                om (_isCacheable(ac))
                {
                    _cachekey = sträng. Join(":", ny sträng[] { ac. Request.RequestUri.AbsolutePath, ac. Request.Headers.Accept.FirstOrDefault(). ToString() });
                    om (WebApiCache.Contains(_cachekey))
                    {
                        var val = (string)WebApiCache.Get(_cachekey);
                        om (val != null)
                        {
                            AC. Respons = ac. Request.CreateResponse();
                            AC. Response.Content = ny StringContent(val);
                            var contenttype = (MediaTypeHeaderValue)WebApiCache.Get(_cachekey + ":response-ct");
                            om (contenttype == null)
                                contenttype = ny MediaTypeHeaderValue(_cachekey. Split(':')[1]);
                            AC. Response.Content.Headers.ContentType = contenttype;
                            AC. Response.Headers.CacheControl = setClientCache();
                            återvända;
                        }
                    }
                }
            }
            annars
            {
                kasta ny ArgumentNullException("actionContext");
            }
        }


//Action调用后执行方法
        public override void OnActionExecuted(HttpActionExecutedContext actionExecutedContext)
        {
            om (!( WebApiCache.Contains(_cachekey)))
            {
                var body = actionExecutedContext.Response.Content.ReadAsStringAsync(). Resultat;
                WebApiCache.Add(_cachekey, body, DateTime.Now.AddSeconds(_timespan));
                WebApiCache.Add(_cachekey + ":response-ct", actionExecutedContext.Response.Content.Headers.ContentType, DateTime.Now.AddSeconds(_timespan));
            }
            om (_isCacheable(actionExecutedContext.ActionContext))
                actionExecutedContext.ActionContext.Response.Headers.CacheControl = setClientCache();
        }

    }

3. Kontrollern måste lägga till cachen i Get-metoden för att lägga till filtret

     [WebApiOutputCache(120,60,false)]
        offentlig sträng GetShoppingCart()
        {
            återvänder "Hello World";
        }
Börja, observera brytpunkten och observera effekten. Hela processen går ut på: initiera cachefiltret vid uppstart, och anropa sedan Get-metoden med filtret tillagt, ange OnActionExexing-metoden, avgöra om det finns en relevant cache, om det finns, returnera resultatet direkt, om inte, anropa kontrollerns Action, och sedan anropa OnActionExekvered-metoden för att lägga till det relevanta cache-nyckel-värde-paret och sätta cachens utgångstid för att returnera resultatet.




Föregående:Avinstallera det redundanta applikationsverktyget win10
Nästa:"CSS World" av Zhang Xinxu azw3+mobi+epub
Publicerad på 2019-01-19 09:09:45 |
Bra
Friskrivning:
All programvara, programmeringsmaterial eller artiklar som publiceras av Code Farmer Network är endast för lärande- och forskningsändamål; Ovanstående innehåll får inte användas för kommersiella eller olagliga ändamål, annars kommer användarna att bära alla konsekvenser. Informationen på denna sida kommer från internet, och upphovsrättstvister har inget med denna sida att göra. Du måste helt radera ovanstående innehåll från din dator inom 24 timmar efter nedladdning. Om du gillar programmet, vänligen stöd äkta programvara, köp registrering och få bättre äkta tjänster. Om det finns något intrång, vänligen kontakta oss via e-post.

Mail To:help@itsvse.com