में सशर्त आउटपुट कैशिंग आउटपुट कैश से अनुरोध को हल करने के लिए प्रोग्रामेटिक रूप से ASP.NET को प्रोग्राम करने के तरीके के बारे में एक प्रश्न है।एएसपी.नेट
कल्पना कीजिए कि आपके पास एक पृष्ठ आउटपुट कैश किया गया है (उदा। http://domain/page.aspx) सीएमएस से कैश नीति सेटिंग्स को रनटाइम पर HttpResponse पर लागू करने के माध्यम से। प्रति अनुरोध आधार पर यानी वर्तमान उपयोगकर्ता को प्रमाणित किया जाता है + ज्ञात समूहों (या व्यापार तर्क द्वारा मिलान) के एक समूह का सदस्य, मैं एएसपी.NET को को को आउटपुट से अनुरोध को हल करने के लिए निर्देश देना चाहता हूं कैश।
परिदृश्य यह है कि एक ही समय में दो अलग-अलग उपयोगकर्ता सिस्टम पर हैं (या अधिक)। उपयोगकर्ता ए प्रमाणित है + ज्ञात समूहों के एक समूह का सदस्य, और उपयोगकर्ता बी अज्ञात है। पृष्ठ को आउटपुट कैश किए जाने के बावजूद, मैं प्रमाणित उपयोगकर्ता को सभी पृष्ठों को ब्राउज़ करना चाहता हूं जैसे कोई आउटपुट कैशिंग सक्षम नहीं है - कभी भी; साथ ही, मैं एएसपी.NET को अज्ञात उपयोगकर्ताओं को आउटपुट कैश किए गए पृष्ठों की सेवा जारी रखना चाहता हूं (या, जो उपयोगकर्ता व्यवसाय तर्क से मेल नहीं खाते हैं)।
ठेठ सुझाव VaryByHeader, VaryByParam आदि का उपयोग करें और उत्पादन कैश दूषित करते है - अच्छा नहीं है, लेकिन उत्पादन कैश मॉड्यूल में खुदाई करते समय परावर्तक का उपयोग कर, मैंने देखा है कि उत्पादन कैश मॉड्यूल मामले एक जोड़े में वर्तमान अनुरोध को छोड़ देता है ज्ञात "कैश-कंट्रोल" हेडर मौजूद हैं। जहां तक मैं हेडर के बारे में चिंतित हूं, इन्हें ब्राउज़र से भेजा जाता है यदि उपयोगकर्ता पता बार में F5 या ENTER मारकर एक नई प्रतिलिपि प्रस्तुत करने के लिए मजबूर करता है।
तो, मैं जो कर रहा हूं वह एक कस्टम http मॉड्यूल में "कैश-कंट्रोल" हेडर को "नो-कैश" पर सेट कर रहा है जो किसी ऐसे ईवेंट में होता है जो ResolveRequestCache ईवेंट से पहले होता है जिसमें आउटपुट कैश सदस्यता लेता है। इस तरह:
context.Request.Headers["Cache-Control"] = "no-cache";
सभी, अच्छा और dandy है लेकिन, अगर HttpCachePolicy.SetValidUntilExpires (सही) कैश नीति सेट होती है, ASP.NET अनुरोध हेडर पहले से निर्धारित की उपेक्षा करता है और उत्पादन कैश से अनुरोध कार्य करता है।
एक विकल्प के रूप में, मुझे लगता है कि मैं एक ही http मॉड्यूल में एक पोस्ट-प्रोसेसिंग ईवेंट में अतिरिक्त कोड लिख सकता हूं ताकि यह सुनिश्चित किया जा सके कि HttpCachePolicy.SetValidUntilExpires (false) को आउटपुट कैशिंग कॉन्फ़िगर किया गया है, लेकिन मुझे लगता है कि यह वास्तव में आउटपुट कैश से अनुरोध को हल करने के लिए एएसपी.NET को निर्देश देने में सक्षम होने के लिए एक और अधिक साफ समाधान होगा। मैं इस सवाल के बहुत सारे समाधानों की कल्पना कर सकता हूं, लेकिन मैं सही के बाद हूं।
संदर्भ के लिए, मैं अगर सबसे कोशिश कर रहे हैं नहीं HttpCachePolicy वर्ग उदा .:
HttpResponse.Cache.SetNoServerCaching()).
ओलिवर, यह बहुत देर हो चुकी है और धन्यवाद उत्तर के लिए जो मैंने अभी लागू किया है। मैं सोच रहा हूं कि मैं ** AddValidationCallback ** विधि को कैसे याद कर सकता था .. फिर फिर, क्या मायने रखता है ढांचे के साथ काम करना, जो कि मैंने पिछले कार्यान्वयन के साथ याद किया था। –