【问题标题】:MVC 4.0 Clearing output cache using HttpResponse.RemoveOutputCacheItemMVC 4.0 使用 HttpResponse.RemoveOutputCacheItem 清除输出缓存
【发布时间】:2014-02-13 07:17:09
【问题描述】:

我正在尝试在 MVC 4.0 ASP.net 应用程序中实现缓存。我可以使用 outputcache 进行缓存

[OutputCache (Duration=60)]
public ActionResult myaction(string parm1)
{
     --logic to construct the model object
     -- followed by this return statement

     return PartialView(model);
}

但我需要在编辑存储在 xml 文件中的数据后清除缓存。

所以我尝试添加

HttpResponse.RemoveOutputCacheItem(Url.Action("myaction", "myController"));

在调用return RedirectToAction(myaction);之前在同一控制器的另一个动作中

但是缓存没有被重置。

这是使用动作刷新输出缓存的方法吗?我使用 ajax 从 jquery 调用这些操作。

【问题讨论】:

    标签: asp.net-mvc asp.net-mvc-4 caching


    【解决方案1】:

    请改用ICacheProviderOutputCache 的功能非常有限。

    一旦您需要更改缓存的数据,您可以在使用OutputCache 时使用ICacheProvider 使该特定数据无效,您可以缓存整个ActionResult 或不缓存。

    另外,OutputCache 既没有 ICacheProvider 所具有的灵活性,也没有使用它的美妙之处。

    【讨论】:

    • 谢谢。我能够使用 ICacheProvider 将缓存添加到我的应用程序中;但我也想要清除整个缓存的能力,而不仅仅是使用密钥在缓存中的一个条目。我想不出一种遍历缓存的方法;是否可以循环遍历对象缓存/内存缓存以清除整个缓存?
    【解决方案2】:

    ASP.NET MVC 支持甜甜圈缓存,但不支持甜甜圈缓存。您可以缓存部分视图并排除父视图,但您不能缓存父视图并排除部分视图。编写自定义过滤器进行缓存或使用https://www.nuget.org/packages/MvcDonutCaching

    【讨论】:

      【解决方案3】:

      您可能将输出缓存在用户的机器上而不是服务器上。尝试指定位置:

      [OutputCache(Location= System.Web.UI.OutputCacheLocation.Server, Duration=60]
      

      否则缓存删除将不起作用,因为您已经在用户的机器上缓存了 HTML 输出

      【讨论】:

      • 感谢 Jason 的快速回复;我也尝试过添加位置,但这也没有用。
      猜你喜欢
      • 2012-10-07
      • 1970-01-01
      • 2011-12-29
      • 2018-06-28
      • 1970-01-01
      • 2015-07-25
      • 1970-01-01
      • 2017-10-19
      • 2017-10-03
      相关资源
      最近更新 更多