Šis straipsnis yra veidrodinis mašininio vertimo straipsnis, spauskite čia norėdami pereiti prie originalaus straipsnio.

Rodinys: 14395|Atsakyti: 1

[WebAPI] ASP.Net Išvesties talpykla ASP.NET žiniatinklio API

[Kopijuoti nuorodą]
Paskelbta 2019-01-17 16:40:51 | | |
1. Nuget įdiegia atitinkamą DLL

Web API 2: Install-Package Strathweb.CacheOutput.WebApi2
1 žiniatinklio API: diegimo paketas Strathweb.CacheOutput

Du. Sukurkite naują ActionFilterAttribute ir nepaisykite susijusių metodų

    viešoji klasė WebApiOutputCacheAttribute : ActionFilterAttribute
    {
        Talpyklos laikas/sek
        privatus int _timespan;
        Kliento talpyklos laikas/sek
        privatus int _clientTimeSpan;
        Ar jį talpykloje saugo anoniminiai vartotojai
        privatus bool _anonymousOnly;
        Rodyklės rakto talpykla
        privatus styginių _cachekey;
        Talpyklos sandėliai
        privatus statinis tik skaitomas ObjectCache WebApiCache = MemoryCache.Default;


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

//是否缓存
        privatus bool _isCacheable(HttpActionContext ac)
        {
             jei (_timespan > 0 & _clientTimeSpan > 0)
             {
                jei (_anonymousOnly)
                   if (Thread.CurrentPrincipal.Identity.IsAuthenticated)
                         grąžinti klaidingą;
               Jei (ac. Request.Method == HttpMethod.Get) grąžina true;
            }
           kitaip
           {
                mesti naują InvalidOperationException("Neteisingi argumentai");
           }
            grąžinti klaidingą;
        }

        privatus CacheControlHeaderValue setClientCache()
        {
            var cachecontrol = naujas CacheControlHeaderValue();
            cachecontrol. MaxAge = TimeSpan.FromSeconds(_clientTimeSpan);
            cachecontrol. MustRevalidate = true;
            grąžinti talpyklos valdymą;
        }


//Action调用前执行的方法
        viešasis nepaisymas void OnActionExecuting(HttpActionContext ac)
        {
            if (ac != null)
            {
                jei (_isCacheable (ac))
                {
                    _cachekey = eilutė. Join(":", nauja eilutė[] { ac. Request.RequestUri.AbsolutePath, ac. Request.Headers.Accept.FirstOrDefault(). ToString() });
                    if (WebApiCache.Contains(_cachekey))
                    {
                        var val = (eilutė)WebApiCache.Get(_cachekey);
                        if (val != null)
                        {
                            ac. Atsakymas = ac. Request.CreateResponse();
                            ac. Response.Content = naujas StringContent(val);
                            var contenttype = (MediaTypeHeaderValue)WebApiCache.Get(_cachekey + ":response-ct");
                            if (contenttype == null)
                                contenttype = naujas MediaTypeHeaderValue(_cachekey. Split(':')[1]);
                            ac. Response.Content.Headers.ContentType = turinio tipas;
                            ac. Response.Headers.CacheControl = setClientCache();
                            grąžinimas;
                        }
                    }
                }
            }
            kitaip
            {
                mesti naują ArgumentNullException("actionContext");
            }
        }


//Action调用后执行方法
        viešasis nepaisymas void OnActionExecuted(HttpActionExecutedContext actionExecutedContext)
        {
            jei (!( WebApiCache.Contains(_cachekey)))
            {
                var body = actionExecutedContext.Response.Content.ReadAsStringAsync(). Rezultatas;
                WebApiCache.Add(_cachekey, body, 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. Valdiklis turi pridėti talpyklą prie metodo Get, kad pridėtų filtrą

     [WebApiOutputCache(120,60,false)]
        viešoji eilutė GetShoppingCart()
        {
            grįžti "Hello World";
        }
pradėkite, stebėkite lūžio tašką ir stebėkite efektą. Visas procesas yra toks: paleidžiant inicijuokite talpyklos filtrą, tada iškvieskite metodą Get su pridėtu filtru, įveskite metodą OnActionFulfuling, nustatykite, ar yra atitinkama talpykla, jei yra, grąžinkite rezultatą tiesiogiai, jei ne, iškvieskite valdiklio veiksmą, tada iškvieskite metodą OnAction, kad pridėtumėte atitinkamą talpyklos rakto ir reikšmės porą ir nustatytumėte talpyklos galiojimo laiką, kad gautumėte rezultatą.




Ankstesnis:Pašalinkite "win10" perteklinį programos įrankį
Kitą:"CSS Pasaulis" pagal Zhang Xinxu azw3 + mobi + epub
Paskelbta 2019-01-19 09:09:45 |
Geras
Atsakomybės apribojimas:
Visa programinė įranga, programavimo medžiaga ar straipsniai, kuriuos skelbia Code Farmer Network, yra skirti tik mokymosi ir mokslinių tyrimų tikslams; Aukščiau nurodytas turinys negali būti naudojamas komerciniais ar neteisėtais tikslais, priešingu atveju vartotojai prisiima visas pasekmes. Šioje svetainėje pateikiama informacija gaunama iš interneto, o ginčai dėl autorių teisių neturi nieko bendra su šia svetaine. Turite visiškai ištrinti aukščiau pateiktą turinį iš savo kompiuterio per 24 valandas nuo atsisiuntimo. Jei jums patinka programa, palaikykite autentišką programinę įrangą, įsigykite registraciją ir gaukite geresnes autentiškas paslaugas. Jei yra kokių nors pažeidimų, susisiekite su mumis el. paštu.

Mail To:help@itsvse.com