See artikkel on masintõlke peegelartikkel, palun klõpsake siia, et hüpata algse artikli juurde.

Vaade: 14395|Vastuse: 1

[WebAPI] ASP.Net Väljundi vahemällu salvestamine ASP.NET Web API-s

[Kopeeri link]
Postitatud 17.01.2019 16:40:51 | | |
1. Nuget paigaldab vastava DLL-i

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

Kaks. Loo uus ActionFilterAtribuut ja üle kirjuta seotud meetodid

    public class WebApiOutputCacheAttribute : ActionFilterAttribute
    {
        Vahemälu aeg/sekund
        privaatne int _timespan;
        Kliendi vahemälu aeg/sekund
        privaatne intellekt _clientTimeSpan;
        Kas see on anonüümsete kasutajate poolt vahemällu salvestatud
        eraväelane Bool _anonymousOnly;
        Vahemällu salvesta indeksvõti
        privaatne keelpill _cachekey;
        Varulad
        privaatne staatiline ainult lugemine ObjectCache WebApiCache = MemoryCache.Default;


        public WebApiOutputCacheAttribute(int timespan, int clientTimeSpan, bool anonymousOnly)
        {
          _timespan = ajavahemik;
          _clientTimeSpan = clientTimeSpan;
          _anonymousOnly = anonüümneAinult;
        }

//是否缓存
        private bool _isCacheable(HttpActionContext ac)
        {
             kui (_timespan > 0 && _clientTimeSpan > 0)
             {
                if (_anonymousOnly)
                   if (Thread.CurrentPrincipal.Identity.IsAuthenticated)
                         tagasta vale;
               kui (AC. Request.Method == HttpMethod.Get) tagastab tõe;
            }
           else
           {
                viska uus InvalidOperationException("Valed argumendid");
           }
            tagasta vale;
        }

        private CacheControlHeaderValue setClientCache()
        {
            var cachecontrol = uus CacheControlHeaderValue();
            cache control. MaxAge = TimeSpan.FromSeconds(_clientTimeSpan);
            cache control. MustRevalidate = tõene;
            return cache control;
        }


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


//Action调用后执行方法
        public override void OnActionExecuted(HttpActionExecutedContext actionExecutedContext)
        {
            kui (!( WebApiCache.Contains(_cachekey)))
            {
                var body = actionExecutedContext.Response.Content.ReadAsStringAsync(). Tulemus;
                WebApiCache.Add(_cachekey, keha, 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. Kontroller peab lisama vahemälu Get meetodile, et lisada filter

     [WebApiOutputCache(120,60,vale)]
        avalik string GetShoppingCart()
        {
            tagasi "Hello World";
        }
Alusta, jälgi murdepunkti ja jälgi selle mõju. Kogu protsess on järgmine: initsialiseeri vahemälufilter käivitamisel, seejärel kutsu Get meetod koos filtriga kaasatud, sisesta OnActionExecuting meetod, määra, kas on asjakohane vahemälu, kui on, tagasta tulemus otse, kui ei ole, kutsu kontrolleri Action ja seejärel kutsu OnActionExecuted meetod, et lisada vastav vahemälu võti-väärtuse paar ning määrata vahemälu aegumisaeg tulemuse tagastamiseks.




Eelmine:Desinstalli win10 redundantne rakendustööriist
Järgmine:"CSS World" autor Zhang Xinxu azw3+mobi+epub
Postitatud 19.01.2019 09:09:45 |
Hea
Disclaimer:
Kõik Code Farmer Networki poolt avaldatud tarkvara, programmeerimismaterjalid või artiklid on mõeldud ainult õppimiseks ja uurimistööks; Ülaltoodud sisu ei tohi kasutada ärilistel ega ebaseaduslikel eesmärkidel, vastasel juhul kannavad kasutajad kõik tagajärjed. Selle saidi info pärineb internetist ning autoriõiguste vaidlused ei ole selle saidiga seotud. Ülaltoodud sisu tuleb oma arvutist täielikult kustutada 24 tunni jooksul pärast allalaadimist. Kui sulle programm meeldib, palun toeta originaaltarkvara, osta registreerimist ja saa paremaid ehtsaid teenuseid. Kui esineb rikkumist, palun võtke meiega ühendust e-posti teel.

Mail To:help@itsvse.com