FileStreamResult döndüren bir MVC4 GET eylem yöntemim var. Bu beklendiği gibi davranır ve şu yanıtı üretirSetCacheability yöntemiyle ayarlandıktan sonra bir Pragma önbellek yanıtı üstbilgisini kaldırmak mümkün mü?
[OutputCache(NoStore = true, Duration = 0, VaryByParam = "None", Location = OutputCacheLocation.None)]
: Bir gereklilik sadece SSL kullanmak ve sunulan belgenin önbelleğe bu yüzden ve ben de aşağıdaki özelliklere sahip OutputCache filtreyi kullandım SSL izin vermemeyi için var başlıklar:
Cache-Control: no-cache, no-store
Expires: -1
Pragma: no-cache
da IE8 desteklemek için istedi ve burada birçok da belgeler sadece mix ayarlanır no-cache ve SSL hem indirmek olmayacak karşılaştım kadar bütün iyi oldu. IE8 ve aşağıdaki için geçerli olan çözüm, gerçekten uygun olmayan bazı kayıt defteri ayarlarının eklenmesi veya temel gereksinimi ortadan kaldıran önbellek başlıklarının kaldırılmasıdır.
Fiddler ve IE8 ile deneme yaptım ve pragma: no-cache üstbilgisini kaldırdım, ancak Önbelleği Denetimi bozulmadan bıraktıysam bir belge indirebildim. Bu, geçici internet dosyamda belgenin bir kopyasını bırakmadı gibi görünüyor, ancak bunu biraz daha test etmem gerekebilir.
Bu bilgiler göz önüne alındığında, pragmanın eylem üzerinde bir filtre kullanarak kaldırılmasının basit bir görev olabileceğini düşündüm ancak ne yaptığım önemli değil, Çıktının ne yapacağı değişirse değiştiremiyorum. Hatta OutputCache özniteliği kaldırılır ve kullandım:
Response.Cache.SetCacheability(HttpCacheability.NoCache)
bu yöntem tek başına ben daha önce olduğu gibi aynı önbellek ayarlarını almak ama bu yöntem çağrısının noktasında ayarlanmamış sağlar kullanma. Bu sadece yanıt boru hattında bir noktada uygulanan önbellek politikasını kurar ama ben sadece nerede olduğunu bilmiyorum.
Önbellek başlıklarını yazılırken değiştirmek için yanıt boru hattına takmanın bir yolu olup olmadığını bilen var mı?
DÜZENLEME ben arar ve tepki NameValueCollection herhangi Pragma başlığını kaldırır ve önbelleği kontrol ayarlanır iken Pragma yoktur boru hattına basit bir özel IHttpModule ekledik. Bu, IIS 7.5'in pragmanın kendisini önbellek denetiminde gördükleri duruma göre eklediği anlamına mı geliyor? Eminim, basit bir web sitesi için varsayılanların ötesine hiçbir şey koymadım.
DÜZENLEME modülü içinde Cache-Control başlık değeri Kontrol ve önbellek başlıkları henüz yanıt uygulanan edilmemiştir yüzden özel ayarlanır. Yani modüller çalıştırıldıktan sonra önbellek başlıklarının eklenmesi görünebilir mi?
FWIW, bunu okumak isteyebilirsiniz: http://blogs.msdn.com/b/ieinternals/archive/2009/10/03/internet-explorer-cannot-download-over-https-when-no- cache.aspx. Önbellek başlıkları ayarlanmamış olsa bile, yanıt genellikle diskte geçici bir dosyada olur; İdeal olarak kısa sürede temizlenecek, ama bunun garantisi yok. – EricLaw
Teşekkürler EricLaw. Aramalarımda bu makaleye rastladım. Bu, tarayıcının akışı almasından önce yanıt başlıklarını değiştirmek için kemancıyı kullanmamı istedi. Ben sadece pragma dahil değil ama önbellek denetimini bırakarak dosyanın indirilmesini ancak Temp Internet Files klasöründe göremediğimi fark ettim. Hala bir yerde önbelleğe alınmadığından emin olmak için bunu tekrar test etmem gerektiğini düşünüyorum. – Mark
[Benzer bir sorun] (http://stackoverflow.com/questions/13119340/ie6-8-unable-to-download-file-from-https-site) var ve yanıtı yapmanın bir yolunu bulamadım .Cache.SetCacheability' çalışması - her zaman "Pragma" üstbilgisini ekler ve her zaman "no-cache" 'no-store' yerine koyar. Kontrol edilebilir olmalıydı - IE3/Netscape Navigator ile uğraşmadıkça 'Pragma' başlığını göndermek oldukça anlamsız. – Keith