के लिए एक ही सामग्री कैश करने के लिए मैं अपने MVC नियंत्रक में निम्न कोड है:उपयोग OutputCache और GetVaryByCustomString अनेक पथों
[HttpGet]
[OutputCache(Duration = 3600, VaryByParam = "none", VaryByCustom = "app")]
public async Task<ViewResult> Index(string r)
{
// Stuff...
}
और मैं है मेरी Global.asax.cs कक्षा में GetVaryByCustomString के निम्नलिखित कार्यान्वयन:
public override string GetVaryByCustomString(HttpContext context, string arg)
{
switch (arg.ToLower())
{
case "app":
return context.Request.Url.Host;
default:
return base.GetVaryByCustomString(context, arg);
}
}
हमारे आवेदन में, ग्राहकों को अपने स्वयं उप डोमेन होगा (यानी johndoe.app.com, janedoe.app.com)।
तो कैशिंग को सबडोमेन पर अलग-अलग होना चाहिए।
हालांकि, उस पूरी तरह से योग्य यूआरएल पर किसी भी "पथ" को एक ही कैश साझा करना चाहिए।
- johndoe.app.com/
- johndoe.app.com/123
- johndoe.app.com/abc
नहीं है एक: तो एक ही आउटपुट कैश पढ़ना चाहिए निम्नलिखित थकाऊ कारण यह क्यों है, लेकिन संक्षेप में, यह एक एसपीए ऐप है, और "पथ" वास्तव में सिर्फ एक ट्रैकर है। इसे एक क्वेरी स्ट्रिंग में बदला नहीं जा सकता है।
जब पथ (ट्रैकर) बदलता है, तो अनुक्रमणिका विधि को ताज़ा रूप से एक्सेस किया जाता है। मैं इसे डीबगर के माध्यम से बता सकता हूं। एक नोट के रूप में, GetVaryByCustomString
अभी भी कहा जाता है, लेकिन इसे इंडेक्स विधि संसाधित करने के बाद कहा जाता है।
मैं सबडोमेन के आधार पर कैश कैसे बदल सकता हूं, लेकिन यूआरएल पर पथ (ट्रैकर) पर ध्यान दिए बिना उस कैश का उपयोग कैसे करें?
यह कुछ भी लाभप्रद प्रदान करता है, तो यहां मेरी MVC मार्गों है:
routes.MapRoute(
name: "Tracker",
url: "{r}",
defaults: new { controller = "Home", action = "Index", id = "" });
routes.MapRoute(
name: "Default",
url: "{controller}/{action}/{id}",
defaults: new { controller = "Home", action = "Index", id = UrlParameter.Optional }
);
MVC संस्करण 5.2.3, .NET 4.6.1
मैं अगर यह काम यकीन नहीं है, लेकिन आप एक कस्टम फिल्टर के रूप में GetVaryByCustomString को लागू नहीं कर सकते अगर आप इसे होना चाहते हैं सूचकांक कार्रवाई से पहले निष्पादित ?? –
@RAHULSR मुझे ऐसा नहीं लगता है। आपको इसे Global.asax.cs में ओवरराइड करना होगा। मैं एक कस्टम कैशिंग समाधान लागू कर सकता हूं, जिसमें एक्शन फ़िल्टर, या ग्लोबल वेब हैंडलर, या कुछ ऐसा शामिल है, लेकिन यह आदर्श नहीं होगा। – contactmatt
इसे नियंत्रक के कन्स्ट्रक्टर में डालने के बारे में कैसे जोड़ें ?? कृपया अपना उत्तर भी साझा करें मैं अब थोड़ा उत्सुक हूं –