如何使用OutputCacheAttribute手动运行方法

时间:2014-10-06 10:05:46

标签: c# asp.net-mvc-4 outputcache

我有方法:

    [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时,我需要重新填写消息。

1 个答案:

答案 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调用都将获得新数据。