【问题标题】:Vary Cache by URL for MVC Renderings?通过 MVC 渲染的 URL 改变缓存?
【发布时间】:2013-07-14 18:23:34
【问题描述】:

使用 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 成功附加原始URL。我现在面临的问题是如何从渲染本身中提取此缓存设置?我想我需要在渲染上创建一个新的“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;
}

【问题讨论】:

    标签: sitecore sitecore7 sitecore-mvc


    【解决方案1】:

    我们还需要 VaryByUrl,但在 WebForms 架构 (v.6.5.0) 中。

    对于子布局定义,我覆盖了 Sublayout 类以添加 VaryByUrl,类似于您在上面的完成方式。

    假设您的 Sitecore 版本仍然使用相同的渲染参数模板,对于渲染实例,您必须创建自己的版本的 /sitecore/templates/System/Layout/Rendering Parameters/ 的 Source 字段中引用的类标准渲染参数/缓存/缓存。

    这是 Source 字段中的类引用: type=Sitecore.Shell.Applications.Layouts.DeviceEditor.CachingField,Sitecore.Client

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2020-05-05
      • 2017-10-19
      • 2012-08-25
      • 1970-01-01
      • 1970-01-01
      • 2011-02-18
      • 1970-01-01
      相关资源
      最近更新 更多