我有方法:
[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);
}
从基本布局调用:@Html.Partial("TopNotification")
我需要在缓存结束之前发生某些操作时重写notificationMessages。 用户访问某个URL时,我需要重新填写消息。
答案 0 :(得分: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);
}
访问重置URL时,请提升缓存的版本。所有后续的TopNotification调用都将获得新数据。