如何在索引更新时更新Sitecore Web Api输出的缓存

如何在索引更新时更新Sitecore Web Api输出的缓存,sitecore,sitecore8,sitecore-mvc,Sitecore,Sitecore8,Sitecore Mvc,我正在实现Sitecore 8 Web Api。确切地说,我正在Sitecore Services Infrastructure中使用ServiceApicController。我想知道如何缓存来自这个控制器的JSON输出,使其仅在我从中获取数据的lucene索引重建时更新 我没有将这个控制器注册为控制器渲染,因为显然我们不需要这样做,它只是开箱即用。我只是通过jQuery读取ajax调用的JSON输出,javascript代码和HTML标记位于MVC视图呈现中。我想在视图渲染上设置缓存是没有意

我正在实现Sitecore 8 Web Api。确切地说,我正在Sitecore Services Infrastructure中使用ServiceApicController。我想知道如何缓存来自这个控制器的JSON输出,使其仅在我从中获取数据的lucene索引重建时更新

我没有将这个控制器注册为控制器渲染,因为显然我们不需要这样做,它只是开箱即用。我只是通过jQuery读取ajax调用的JSON输出,javascript代码和HTML标记位于MVC视图呈现中。我想在视图渲染上设置缓存是没有意义的。不是吗


我该怎么办?

最好的选择是使用HtmlCache并将数据存储在那里。此缓存在发布时被完全清除,因此使用它是有意义的

您可以使用
SetHtml
方法将条目添加到缓存中:

var cache = Sitecore.Caching.CacheManager.GetHtmlCache(Sitecore.Context.Site);
var json = cache.GetHtml("mycachekey");
if (string.IsNullOrWhiteSpace(json))
{
    var json = // build your json output here
    cache.SetHtml("mycachekey", jsonValue);
}
return json;

谢谢你,理查德。我认为有某种工具可以在ServiceApicController级别上使用。所以,我们可以使用自定义缓存,对吗?顺便说一句,如果我只是在后端重建索引而不是发布,该怎么办?如果使用自定义缓存,则需要挂接到
publish:end
publish:end:remote
事件,并在自定义代码中清除该缓存。如果使用Sitecore将清除的
HtmlCache
。如果手动重建索引,则必须自己清除缓存,方法是在重建后运行发布或使用
/admin/cache.aspx
管理页面。