2016-01-27 49 views
3

我正在實施Sitecore 8 Web Api。確切地說,我在Sitecore Services Infrastructre中使用ServiceApiController。我想知道如何緩存來自這個控制器的JSON輸出,只有當我從中獲取數據的lucene索引被重建時,它纔會被更新?如何在索引更新時更新Sitecore Web Api輸出的緩存

我還沒有註冊這個控制器作爲控制器渲染,因爲顯然我們不需要這樣做,它只是開箱即用。我只是通過jQuery調用ajax調用來讀取JSON輸出,並且javascript代碼和HTML標記位於MVC視圖呈現內。我想在視圖渲染上設置緩存沒有意義。不是嗎?

我該怎麼辦?

回答

3

最好的選擇是使用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; 
+0

感謝理查德。我雖然有一些設備,可以在ServiceApiController級別上使用。所以,我們可以使用自定義緩存,對吧?順便說一句,如果我只是在後端重建索引而不是發佈呢? – Behrooz

+2

如果您使用自定義緩存,則需要掛接到'publish:end'和'publish:end:remote'事件並在自定義代碼中清除該緩存。如果您使用將由Sitecore清除的HtmlCache。 –

+1

如果手動重建索引,則必須通過重建後運行發佈或使用'/ admin/cache.aspx'管理頁面來清除緩存。 –