在 Sitecore 7 中,我的大部分查询字符串都变成了自定义路由。例如:
OLD: /calendar?year=2013&month=7&day=14
NEW: /calendar/2013/7/14
结果,我发现自己需要通过 URL 而不是查询字符串来改变我的渲染的 HTML 缓存。Sitecore 是否为 MVC 渲染提供了一种通过 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;
}