Artikel ini adalah artikel cermin dari terjemahan mesin, silakan klik di sini untuk melompat ke artikel aslinya.

Melihat: 14395|Jawab: 1

[WebAPI] ASP.Net Cache output di ASP.NET Web API

[Salin tautan]
Diposting pada 17/01/2019 16.40.51 | | |
1. Nuget menginstal dll yang relevan

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

Dua. Buat ActionFilterAttribute baru dan ganti metode terkait

    class publik WebApiOutputCacheAttribute : ActionFilterAttribute
    {
        Waktu cache/detik
        _timespan int pribadi;
        Waktu cache klien/detik
        _clientTimeSpan int pribadi;
        Apakah itu di-cache oleh pengguna anonim
        bool pribadi _anonymousOnly;
        Cache kunci indeks
        _cachekey string pribadi;
        Gudang cache
        readonly statis privat ObjectCache WebApiCache = MemoryCache.Default;


        publik WebApiOutputCacheAttribute(int timesspan, int clientTimeSpan, bool anonymousOnly)
        {
          _timespan = rentang waktu;
          _clientTimeSpan = klienRentang Waktu;
          _anonymousOnly = anonimHanya saja;
        }

//是否缓存
        bool pribadi _isCacheable(HttpActionContext ac)
        {
             jika (_timespan > 0 && _clientTimeSpan > 0)
             {
                jika (_anonymousOnly)
                   if (Thread.CurrentPrincipal.Identity.IsAuthenticated)
                         mengembalikan false;
               jika (ac. Request.Method == HttpMethod.Get) mengembalikan true;
            }
           yang lain
           {
                melemparkan InvalidOperationException baru("Argumen yang Salah");
           }
            mengembalikan false;
        }

        CacheControlHeaderValue pribadi setClientCache()
        {
            var cachecontrol = CacheControlHeaderValue();
            cache. MaxAge = TimeSpan.FromSeconds(_clientTimeSpan);
            cache. MustRevalidate = true;
            mengembalikan cachecontrol;
        }


//Action调用前执行的方法
        penggantian publik void OnActionExecuting(HttpActionContext ac)
        {
            if (ac != null)
            {
                jika (_isCacheable(ac))
                {
                    _cachekey = string. Join(":", string baru[] { ac. Request.RequestUri.AbsolutePath, ac. Request.Headers.Accept.FirstOrDefault(). ToString() });
                    if (WebApiCache.Contains(_cachekey))
                    {
                        var val = (string)WebApiCache.Get(_cachekey);
                        if (val != null)
                        {
                            AC. Respon = ac. Permintaan.CiptakanTanggapan();
                            AC. Response.Content = StringContent(val) baru;
                            var contenttype = (MediaTypeHeaderValue)WebApiCache.Get(_cachekey + ":response-ct");
                            if (contenttype == null)
                                contenttype = MediaTypeHeaderValue(_cachekey baru. Split(':')[1]);
                            AC. Response.Content.Headers.ContentType = tipe konten;
                            AC. Response.Headers.CacheControl = setClientCache();
                            kembali;
                        }
                    }
                }
            }
            yang lain
            {
                melemparkan ArgumentNullException baru("actionContext");
            }
        }


//Action调用后执行方法
        penggantian publik void OnActionExecuted(HttpActionExecutedContext actionExecutedContext)
        {
            jika (!( WebApiCache.Berisi(_cachekey)))
            {
                var body = actionExecutedContext.Response.Content.ReadAsStringAsync(). Hasil;
                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. Pengontrol perlu menambahkan cache ke metode Get untuk menambahkan filter

     [WebApiOutputCache(120,60,false)]
        string publik GetShoppingCart()
        {
            mengembalikan "Hello World";
        }
mulai, amati titik henti, dan amati efeknya. Seluruh prosesnya adalah: menginisialisasi filter cache saat startup, lalu memanggil metode Get dengan filter yang ditambahkan, masuk ke metode OnActionExecuting, menentukan apakah ada cache yang relevan, jika ada, kembalikan hasilnya secara langsung, jika tidak, panggil Action's controller, lalu panggil metode OnActionExecuted untuk menambahkan pasangan kunci-nilai cache yang relevan dan atur waktu kedaluwarsa cache untuk mengembalikan hasilnya.




Mantan:Copot pemasangan alat aplikasi redundan win10
Depan:"Dunia CSS" oleh Zhang Xinxu azw3+mobi+epub
Diposting pada 19/01/2019 09.09.45 |
Bagus
Sanggahan:
Semua perangkat lunak, materi pemrograman, atau artikel yang diterbitkan oleh Code Farmer Network hanya untuk tujuan pembelajaran dan penelitian; Konten di atas tidak boleh digunakan untuk tujuan komersial atau ilegal, jika tidak, pengguna akan menanggung semua konsekuensi. Informasi di situs ini berasal dari Internet, dan sengketa hak cipta tidak ada hubungannya dengan situs ini. Anda harus sepenuhnya menghapus konten di atas dari komputer Anda dalam waktu 24 jam setelah pengunduhan. Jika Anda menyukai program ini, harap dukung perangkat lunak asli, pembelian pendaftaran, dan dapatkan layanan asli yang lebih baik. Jika ada pelanggaran, silakan hubungi kami melalui email.

Mail To:help@itsvse.com