Saya mencari metode untuk menonaktifkan cache browser untuk seluruh situs web ASP.NET MVC
Saya menemukan metode berikut:
Response.Cache.SetCacheability(System.Web.HttpCacheability.NoCache);
Response.Cache.SetNoStore();
Dan juga metode meta tag (tidak akan bekerja untuk saya, karena beberapa tindakan MVC mengirim sebagian HTML / JSON melalui Ajax, tanpa kepala, meta tag).
<meta http-equiv="PRAGMA" content="NO-CACHE">
Tetapi saya mencari metode sederhana untuk menonaktifkan cache browser untuk seluruh situs web.
asp.net
asp.net-mvc
caching
browser-cache
Palani
sumber
sumber
Jawaban:
Semua permintaan dialihkan melalui default.aspx terlebih dahulu - jadi anggap saja Anda bisa memunculkan kode di belakang sana.
sumber
Buat kelas yang mewarisi dari IActionFilter.
Kemudian letakkan atribut di mana diperlukan ...
sumber
if (filterContext.IsChildAction) return;
di bagian atas - ini akan mencegah tindakan luar menjadi 'tidak di-cache' jika tindakan anak memanggil yang dihiasi denganNoCache
atribut. Dengan kata lainNoCache
atribut tidak akan bocor ke tindakan lain jika mereka melakukan tindakan anak. Juga, nama kelas harusNoCacheAttribute
mematuhi konvensi penamaan atribut yang diterima secara umum.Alih-alih menggulung sendiri, cukup gunakan apa yang disediakan untuk Anda.
Seperti yang disebutkan sebelumnya, jangan nonaktifkan caching untuk semuanya. Misalnya, skrip jQuery yang banyak digunakan dalam ASP.NET MVC harus di-cache. Sebenarnya idealnya Anda harus menggunakan CDN untuk itu, tetapi poin saya adalah beberapa konten harus di-cache.
Apa yang saya temukan berfungsi paling baik di sini daripada menaburkan [OutputCache] di mana-mana adalah menggunakan kelas:
Semua pengontrol Anda, Anda ingin menonaktifkan caching untuk kemudian diwarisi dari pengontrol ini.
Jika Anda perlu mengganti default di kelas NoCacheController, cukup tentukan pengaturan cache pada metode tindakan Anda dan pengaturan pada metode Tindakan Anda akan diutamakan.
sumber
[System.Web.Mvc.OutputCache(NoStore = true, Duration = 0, VaryByParam = "*")]
di tingkat kelas, Anda tidak dapat memiliki PartialViews di kelas Anda.Anda mungkin ingin menonaktifkan cache browser untuk semua halaman yang dibuat oleh pengontrol (yaitu halaman HTML), tetapi tetap menyimpan cache untuk sumber daya seperti skrip, style sheet, dan gambar . Jika Anda menggunakan MVC4 + bundling dan minification, Anda ingin mempertahankan durasi cache default untuk skrip dan stylesheet (durasi yang sangat lama, karena cache menjadi tidak valid berdasarkan perubahan URL unik, bukan berdasarkan waktu).
Di MVC4 +, untuk menonaktifkan cache browser di semua pengontrol, tapi simpan untuk apa pun yang tidak dilayani oleh pengontrol, tambahkan ini ke
FilterConfig.RegisterGlobalFilters
:Tetapkan
DisableCache
sebagai berikut:sumber
Saya tahu jawaban ini tidak 100% terkait dengan pertanyaan, tetapi mungkin membantu seseorang.
Jika Anda ingin menonaktifkan cache browser untuk seluruh situs web ASP.NET MVC , tetapi Anda hanya ingin melakukan ini secara TEMPORARILY, maka lebih baik untuk menonaktifkan cache di browser Anda.
sumber
Saya menerapkan semua jawaban sebelumnya dan masih memiliki satu pandangan yang tidak berfungsi dengan benar.
Ternyata nama tampilan saya mengalami masalah bernama 'Terbaru'. Rupanya ini membingungkan browser Internet Explorer.
Setelah saya mengubah nama tampilan (di controller) menjadi nama yang berbeda (saya memilih 'Recent5'), solusi di atas mulai berfungsi.
sumber
Anda dapat mencoba kode di bawah ini dalam file Global.asax.
sumber
UI
Latar Belakang
sumber