.net एकाधिक पथों के लिए समान सामग्री कैश करने के लिए आउटपुट कैश और गेटविरीबैस्टस्ट्रिंग का उपयोग करें



asp.net-mvc caching (1)

क्या आपने उपयोग करने की कोशिश की है: VaryByHeader = "होस्ट"?

[HttpGet]
[OutputCache(Duration = 3600, VaryByHeader = "Host")]
public async Task<ViewResult> Index(string r)
{
   // Stuff...
}

अधिक जानकारी यह आपको अलग-अलग तरीके से कैसे प्राप्त कर सकता है:

बहु-किरायेदार एप्लिकेशन के लिए आउटपुट कैश, मेजबाननाम और संस्कृति के अनुसार अलग-अलग

मेरे पास अपने MVC नियंत्रक में निम्नलिखित कोड है:

[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 को अभी भी कहा जाता है, लेकिन सूचकांक विधि संसाधित होने के बाद इसे कहा जाता है।

मैं उपडोमेन के आधार पर कैश कैसे भिन्न कर सकता हूं, लेकिन URL पर पथ (ट्रैकर) की परवाह किए बिना उस कैश का उपयोग करें?

यदि यह कुछ भी फायदेमंद है, तो यहां मेरा 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 }
        );

एमवीसी संस्करण 5.2.3, .NET 4.6.1





outputcache