我有一个Sitecore 7控制器渲染。我需要通过自定义方法改变OutputCache。
渲染当前在Sitecore中设置为“Cachable”,“VaryByData”和“VaryByParm”。
我已为我的操作添加了输出缓存属性,并设置了自定义变量字符串:
[OutputCache(VaryByCustom = "ThisIsATest", Duration = 60)]
public ActionResult Index()
{
...
}
我的Global.asax继承自Sitecore.Web.Application,我按以下方式覆盖了GetVaryByCustomString:
public override string GetVaryByCustomString(HttpContext context, string custom)
{
if (custom == "ThisIsATest")
return "some custom key";
return base.GetVaryByCustomString(context, custom);
}
我从来没有看到过GetVaryByCustomString方法,并且控制器的行为似乎根本就没有OutputCache属性......就好像它实际上只是做了默认的“Cachable”,“VaryByData” “,”VaryByParm“来自Sitecore的行为。
任何线索?
答案 0 :(得分:10)
好的,我就是这样做的。
我在/sitecore/templates/System/Layout/Sections/Caching
上添加了一个名为“VaryByMyCustomThing”的复选框字段。
然后我用自定义实现替换了Sitecore.Mvc.config中的“GenerateCacheKey”管道。我取代了这个:
<processor type="Sitecore.Mvc.Pipelines.Response.RenderRendering.GenerateCacheKey, Sitecore.Mvc"/>
有了这个:
<processor type="My.Site.Pipelines.GenerateCustomCacheKey, My.Site"/>
我的GenerateCustomCacheKey类如下所示:
using System.Net.Http;
using System.Web;
using Sitecore.Mvc.Extensions;
using Sitecore.Mvc.Pipelines.Response.RenderRendering;
using Sitecore.Mvc.Presentation;
namespace My.Site.Pipelines
{
public class GenerateCustomCacheKey : GenerateCacheKey
{
protected override string GenerateKey(Rendering rendering, RenderRenderingArgs args)
{
var varyByCountryCode = rendering.RenderingItem.InnerItem["VaryByMyCustomThing"].ToBool();
var key = base.GenerateKey(rendering, args);
if (varyByCountryCode)
key = key + GetCountryCodePart(rendering);
return key;
}
protected string GetCountryCodePart(Rendering rendering)
{
return "_#countryCode:" + (string)HttpContext.Current.Session["CountryCode"];
}
}
}