gpt4 book ai didi

c# - 如何使用 ASP.NET MVC 4.0 DonutOutputCache VaryByCustom 使缓存失效

转载 作者:行者123 更新时间:2023-11-30 20:54:17 25 4
gpt4 key购买 nike

我正在为我的 ASP.NET 应用程序使用 DevTrends.MvcDonutCaching 包,它运行良好。我目前遇到的一个问题是使我为子操作设置的 VaryByCustom 缓存失效。

这是我用于 VaryByCustom 设置的一些代码:

public override string GetVaryByCustomString(HttpContext context, string arg)
{
if (arg == "userlogin" && context.User.Identity.IsAuthenticated)
{
return "UserLogin=" + context.User.Identity.Name;
}

return base.GetVaryByCustomString(context, arg);
}

我的 Action 就是这样装饰的:

[Authorize]
[DonutOutputCache(Duration = 3600, VaryByCustom = "userlogin")]
public ActionResult UserProfile()
{ ... }

这就是我尝试清理该缓存的方式(我也尝试过在没有任何参数的情况下使用“userlogin”,但这些都不起作用:

OutputCacheManager om = new OutputCacheManager();
om.RemoveItem("Customer", "UserProfile", new { UserLogin = User.Identity.Name });

那是 Razor View 部分:

<div id="cabinetMain">
@{Html.RenderAction("UserProfile", true);}
</div>

任何帮助将不胜感激。

谢谢。

最佳答案

对我有用的解决方案是使用 OutputCacheManager 的 RemoveItems 方法而不是 RemoveItem。这有点棘手,因为需要使用 RouteValueDictionary。以下对我有用的示例:

OutputCacheManager om = new OutputCacheManager();
RouteValueDictionary rv = new RouteValueDictionary();
rv.Add("userlogin", User.Identity.Name);
om.RemoveItems("Customer", "UserProfile", rv);

关于c# - 如何使用 ASP.NET MVC 4.0 DonutOutputCache VaryByCustom 使缓存失效,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19196309/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com