如何使用OutputCacheAttribute手动运行方法

本文关键字:运行 方法 何使用 OutputCacheAttribute | 更新日期: 2023-09-27 18:25:37

我有方法:

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

如何使用OutputCacheAttribute手动运行方法

如果在服务器端移动缓存,则可以使用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调用都将获得新数据。