साइटकोर 7 के साथ, मेरे अधिकांश क्वेरी स्ट्रिंग कस्टम मार्ग बन गए हैं। उदाहरण के लिए:एमवीसी रेंडरिंग के लिए यूआरएल द्वारा वेरी कैश?
OLD: /calendar?year=2013&month=7&day=14
NEW: /calendar/2013/7/14
नतीजतन, मैं अपने आप को URL के आधार पर मेरी प्रतिपादन के एचटीएमएल कैश अलग, बल्कि क्वेरी स्ट्रिंग द्वारा की तुलना में की जरूरत होती हैं। क्या साइटकोर एमवीसी रेंडरिंग के लिए यूआरएल द्वारा अलग-अलग कैश का सुविधाजनक तरीका प्रदान करता है?
अद्यतन
मैं ने पाया है कि सभी MVC प्रतिपादन mvc.renderRendering पाइप लाइन, जहां उनके कैश कुंजी निम्नलिखित कक्षा में उत्पन्न होता है के माध्यम से पारित:
Sitecore.Mvc.Pipelines.Response.RenderRendering.GenerateCacheKey
अधिभावी तक इस वर्ग की GenerateKey(Rendering rendering, RenderRenderingArgs args)
विधि, मैं site.Request.FilePath
का उपयोग करके कच्चे यूआरएल को सफलतापूर्वक जोड़ सकता हूं। अब जिस समस्या का सामना करना पड़ रहा है वह है कि मैं इस कैश सेटिंग को प्रतिपादन से कैसे निकालूं? मुझे लगता है कि मुझे प्रतिपादन पर एक नया "VaryByUrl" कैशिंग विकल्प बनाना होगा, लेकिन मुझे पूरा यकीन नहीं है।
अद्यतन 2
मैं निम्नलिखित कोड का उपयोग कर प्रतिपादन परिभाषा आइटम के बंद एक कस्टम फ़ील्ड को पढ़ने में सक्षम था। यह काम करता है, लेकिन यह केवल परिभाषा मद (नहीं प्रस्तुति विवरण में प्रतिपादन की वास्तविक उदाहरण)
protected override string GenerateKey(Rendering rendering, RenderRenderingArgs args)
{
var key = base.GenerateKey(rendering, args);
if (rendering.RenderingItem.InnerItem.Fields["VaryByUrl"] != null)
{
var varyByUrl = ((CheckboxField)rendering.RenderingItem.InnerItem.Fields["VaryByUrl"]).Checked;
if (varyByUrl) key += GetUrlPart(rendering);
}
return key;
}