दिलचस्प पोस्ट
कैसे एक फ़ाइल नाम के रूप में अपलोड एक Blob FormData? एम्बरजेएस: एक ही मार्ग पर कई मॉडल कैसे लोड करें? क्या एक जावा संस्करण प्रति JVM है? पृष्ठभूमि रंग के साथ बटन पर सामग्री प्रभाव बूटस्ट्रैप 3 मोडल ऊर्ध्वाधर स्थिति केंद्र सी में _Bool और bool के बीच का अंतर? एक्सेल: कॉलम / पंक्ति / मैट्रिक्स के बीच डेटा परिवर्तित करने के लिए फ़ार्मुलों Django – CSRF सत्यापन विफल गैर-अंतिम क्षेत्र का सिंक्रनाइज़ेशन अजगर में चेन-कॉलिंग पेरेंट कन्स्ट्रक्टर "सॉफ़्टवेयर के कारण के लिए आधिकारिक कारण बंधना: सॉकेट लिखने की त्रुटि" Unwind segue programmatically कैसे करें? कैसे एक JUnit परीक्षण में एकाधिक दावा से बचने के लिए? GPU टाइमआउट, विंडो 7 को बढ़ाने के लिए रजिस्ट्री संशोधित करें अंक एल्गोरिथम के बीच सबसे छोटी दूरी

ASP.NET MVC स्वचालित कैशिंग विकल्प को कैसे अक्षम करें?

Asp.Net mvc अनुप्रयोग से स्वचालित ब्राउज़र कैशिंग कैसे अक्षम करें?

क्योंकि मुझे कैशिंग के साथ समस्या आ रही है क्योंकि यह सभी लिंक कैश करता है। परन्तु कभी-कभी इसे ऑब्जेक्ट ऑब्जेक्ट पेज को पुनः निर्देशित कर दिया जाता है, जो इसे कैशिंग में संग्रहीत करता है और फिर जब भी मैं उस लिंक पर क्लिक करता हूं, वह मुझे डिफ़ैक्ट इंडेक्स पेज पर रीडायरेक्ट करेगा।

तो किसी को पता है कि मैन्युअल रूप से ASP.NET MVC 4 से कैशिंग विकल्प को कैसे अक्षम किया जा सकता है?

वेब के समाधान से एकत्रित समाधान "ASP.NET MVC स्वचालित कैशिंग विकल्प को कैसे अक्षम करें?"

आप नियंत्रक में विशिष्ट क्रियाओं या सभी कार्यों के लिए सर्वर और / या ब्राउज़र कैशिंग को नियंत्रित करने के लिए OutputCacheAttribute का उपयोग कर सकते हैं।

नियंत्रक में सभी कार्यों के लिए अक्षम करें

 [OutputCacheAttribute(VaryByParam = "*", Duration = 0, NoStore = true)] // will be applied to all actions in MyController, unless those actions override with their own decoration public class MyController : Controller { // ... } 

किसी विशिष्ट क्रिया के लिए अक्षम करें:

 public class MyController : Controller { [OutputCacheAttribute(VaryByParam = "*", Duration = 0, NoStore = true)] // will disable caching for Index only public ActionResult Index() { return View(); } } 

यदि आप सभी नियंत्रकों में सभी कार्यों के लिए एक डिफ़ॉल्ट कैशिंग रणनीति लागू करना चाहते हैं, तो आप अपने global.asax.cs संपादित करके और RegisterGlobalFilters विधि के लिए एक वैश्विक कार्रवाई फ़िल्टर जोड़ सकते हैं। यह विधि डिफ़ॉल्ट MVC अनुप्रयोग प्रोजेक्ट टेम्पलेट में जोड़ा गया है।

 public static void RegisterGlobalFilters(GlobalFilterCollection filters) { filters.Add(new OutputCacheAttribute { VaryByParam = "*", Duration = 0, NoStore = true, }); // the rest of your global filters here } 

इससे प्रत्येक कार्रवाई के लिए निर्दिष्ट OutputCacheAttribute को लागू करने का कारण होगा, जो कि सर्वर और ब्राउज़र कैशिंग को अक्षम करेगा। आप अब भी विशिष्ट कार्यों और नियंत्रकों के लिए OutputCacheAttribute कैश विशेषता जोड़कर इस नो-कैश को ओवरराइड करने में समर्थ होंगे।

हैकबैक चाइनीज ने इस बिंदु को याद किया है वह क्लाइंट कैश के साथ सर्वर कैश को भूल गया। आउटपुट कैश विशेषता नियंत्रण सर्वर कैश (IIS http.sys कैश), ब्राउज़र (क्लाइंट) कैश नहीं।

मैं आपको अपने कोडबेस का एक बहुत छोटा हिस्सा देता हूं इसे बुद्धिमानी से उपयोग करो।

 [AttributeUsage(AttributeTargets.Method | AttributeTargets.Class)] public sealed class NoCacheAttribute : FilterAttribute, IResultFilter { public void OnResultExecuting(ResultExecutingContext filterContext) { } public void OnResultExecuted(ResultExecutedContext filterContext) { var cache = filterContext.HttpContext.Response.Cache; cache.SetCacheability(HttpCacheability.NoCache); cache.SetRevalidation(HttpCacheRevalidation.ProxyCaches); cache.SetExpires(DateTime.Now.AddYears(-5)); cache.AppendCacheExtension("private"); cache.AppendCacheExtension("no-cache=Set-Cookie"); cache.SetProxyMaxAge(TimeSpan.Zero); } } 

उपयोग:

 /// will be applied to all actions in MyController [NoCache] public class MyController : Controller { // ... } 

इसे समझदारी से उपयोग करें क्योंकि यह वास्तव में सभी क्लाइंट कैश को अक्षम करता है। केवल अक्षम कैश "बैक बटन" ब्राउज़र कैश नहीं है। लेकिन ऐसा लगता है कि वास्तव में इसके आसपास आने का कोई रास्ता नहीं है। हो सकता है कि केवल जावास्क्रिप्ट का उपयोग करके इसे पता लगाया जाए और पृष्ठ या पृष्ठ क्षेत्र ताज़ा करें।

हम निरर्थक कोड से बचने के लिए पृष्ठों में व्यक्तिगत रूप से कैश मूल्यों को सेट करने के बजाय Web.config फ़ाइल में कैश प्रोफ़ाइल सेट कर सकते हैं। आउटपुट कैश विशेषता की कैशप्रोफ़ाइल प्रॉपर्टी का उपयोग करके हम प्रोफ़ाइल को संदर्भित कर सकते हैं। इस कैश प्रोफ़ाइल को सभी पृष्ठों पर लागू किया जाएगा, जब तक पेज / विधि इन सेटिंग्स को ओवरराइड न करें।

 <system.web> <caching> <outputCacheSettings> <outputCacheProfiles> <add name="CacheProfile" duration="60" varyByParam="*" /> </outputCacheProfiles> </outputCacheSettings> </caching> </system.web> 

और अगर आप अपनी विशेष क्रिया या नियंत्रक से कैशिंग को अक्षम करना चाहते हैं, तो आप उस विशिष्ट क्रिया विधि को सजाने के द्वारा कॉन्फ़िग कैश सेटिंग्स को ओवरराइड कर सकते हैं जैसे कि नीचे दिखाया गया है:

 [OutputCache(NoStore = true, Duration = 0, VaryByParam = "*")] public ActionResult NoCachingRequired() { return PartialView("abcd"); } 

आशा है कि यह स्पष्ट है और आपके लिए उपयोगी है।

यदि आप ब्राउज़र कैशिंग को रोकना चाहते हैं, तो आप इस कोड को ShareFunction से उपयोग कर सकते हैं

 public override void OnResultExecuting(ResultExecutingContext filterContext) { filterContext.HttpContext.Response.Cache.SetExpires(DateTime.UtcNow.AddDays(-1)); filterContext.HttpContext.Response.Cache.SetValidUntilExpires(false); filterContext.HttpContext.Response.Cache.SetRevalidation(HttpCacheRevalidation.AllCaches); filterContext.HttpContext.Response.Cache.SetCacheability(HttpCacheability.NoCache); filterContext.HttpContext.Response.Cache.SetNoStore(); base.OnResultExecuting(filterContext); } 

पेज समाधान पर, अपने लेआउट पेज में इसे सेट करें:

 <meta http-equiv="Cache-Control" content="no-cache"> <meta http-equiv="Pragma" content="no-cache"> <meta http-equiv="Expires" content="0">