2014-10-06 45 views
0

運行方法我有方法:@Html.Partial("TopNotification")如何手動與OutputCacheAttribute

我需要在某個動作緩存結束的時間之前發生重寫我的notificationMessages:

[HttpGet] 
    [OutputCache(Duration = 300, Location = OutputCacheLocation.Client)]  
    public JsonResult TopNotification(Guid? portalIdentifier, string url) 
    { 
     var notificationMessages = new List<NotificationModel>(); 

     //Filling notification messages 

     return Json(notificationMessages, JsonRequestBehavior.AllowGet); 
    } 

它是從基地佈局稱爲。 當用戶轉到某個URL時,我需要重新填充消息。

+1

http://stackoverflow.com/questions/16194140/how-to-invalidate-cache-data-outputcache-from-a-controller?但是:如果你在客戶端緩存***:沒有機會。你不能讓客戶忘記,除非他們也回到服務器檢查304 – 2014-10-06 10:07:55

回答

1

如果您在服務器端移動緩存,則可以使用OutputCache的VaryByParam屬性來存儲緩存版本信息。然後在Global.asax中重寫GetVaryByCustomString並返回當前版本的緩存。

每次訪問重置URL時,都可以提高緩存的版本,從而使輸出緩存失效。

例子:

[OutputCache(Duration = 300, Location = OutputCacheLocation.Server, VaryByCustom = "cache")] 
public JsonResult TopNotification(Guid? portalIdentifier, string url) {...} 

而且在Global.asax中:

public override string GetVaryByCustomString(HttpContext context, string custom) 
{ 
    if (custom.Equals("cache")) 
     return Cache.Version; // something like that 

    return base.GetVaryByCustomString(context, custom); 
} 

當訪問重置網址,提高緩存的版本。所有後續的TopNotification調用都將獲得新數據。