【问题标题】:Remove action from Output Cache从输出缓存中删除操作
【发布时间】:2012-02-07 04:32:08
【问题描述】:

ASP.Net MVC 3.

我发现了类似的问题/答案,但似乎没有一个可以解决这个问题...

类似: HttpResponse.RemoveOutputCacheItem is not working

How to "invalidate" portions of ASP.NET MVC output cache?

我正在使用 OutputCache 来缓存 FileContentResult(图像)。

我的动作是这样的:

[HttpGet]
[OutputCache(Location = OutputCacheLocation.Client, Duration = 300, VaryByParam = "id")]
public FileContentResult Photo(int id) {
    byte[] photo = //GetPhoto;

    return File(photo,"image/jpeg");
}

在我看来,我必须遵循:

<img src="@Url.Action("Photo", "Client", new {id = Model.Id})"/>

这工作正常,并且输出缓存按预期工作....现在问题

我正在尝试在更新后重置缓存。

更新操作中的代码如下所示:

var url = Url.Action("Photo", "Client", new {id = Model.Id});
Response.RemoveOutputCacheItem(url);

问题是缓存没有重置。调试时,找不到缓存对象在哪里(我试过System.Web.HttpContext.Current.Cache,但好像没有缓存项)。

感谢您的帮助!

【问题讨论】:

    标签: asp.net-mvc asp.net-mvc-3 outputcache


    【解决方案1】:

    我最终使用了这段代码,效果很好!

    http://antix.co.uk/Blog/IfModifiedAttribute

    【讨论】:

    • 这正是我想要的! :) 像魅力一样工作。
    【解决方案2】:

    我不完全确定您的情况,但我发现有关子操作的视图:它们使用自己的缓存(不是 System.Web.HttpContext.Current.Cache),您可以通过它访问 静态成员

    CacheOutputAttribute.ChildActionCache
    

    子动作的缓存有相当复杂的键,我无法计算。 因此,我最终找到了向我的模型添加新变量(例如版本或时间戳)并将其作为参数传递给操作方法的解决方案;所以我可以通过更改这个属性来使我的缓存失效。

    但是我不能 100% 确定这是你的情况,因为你没有做子动作缓存。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2020-09-02
      • 2011-03-30
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-06-16
      • 2013-01-14
      相关资源
      最近更新 更多