我已經添加輸出緩存的一對夫婦的行動,我的應用程序進行一些簡單的性能提升。但是,這些操作還需要在每次請求(它是一個視圖計數器)後通過點擊Redis數據庫來增加計數器。與輸出緩存和其他行動工作濾清器
起初,我想我可能只是調整中的操作篩選器執行,以確保觀看次數的計算順序:
public class CountersAttribute : ActionFilterAttribute
{
public override void OnResultExecuted(ResultExecutedContext filterContext)
{
//increment my counter all clever like
base.OnResultExecuted(filterContext);
}
}
但沒有工作;顯然OutputCacheAttribute不像一個正常的操作過濾器。然後我嘗試實現一個自定義輸出緩存:
public class OutputCacheWithCountersAttribute : OutputCacheAttribute
{
public override void OnResultExecuted(ResultExecutedContext filterContext)
{
//straight to the source to get my headcount!
base.OnResultExecuted(filterContext);
}
}
不,也沒有工作;一旦動作被緩存,動作過濾器似乎完全被忽略。遊民。
所以,呃,有沒有辦法(沒有實現自定義輸出緩存提供者)對我來說,我保證意見正確計算是乾淨和理性呢?
這很奇妙,除了現在我的VaryByCustom參數不工作。 GetVaryByCustomString()在全局變量中被調用,但是Donut似乎沒有遵守我所做的Response.Cache更改(即關閉認證用戶的緩存)。 – Dusda
context.Response.Cache.SetCacheability(HttpCacheability.NoCache); context.Response.Cache.SetExpires(DateTime.Now.AddMinutes(-1)); context.Response.Cache.SetNoStore(); context.Response.Cache.SetNoServerCaching(); 這些是我的Response.Cache更改;無論如何,甜甜圈似乎無視它們並緩存它。 – Dusda
我將頁面視圖移動到ajax調用,而不是再混淆VaryByCustom。但是,給出的答案是解決這個問題的一個很好的方法。謝謝:D。 – Dusda