从输出缓存中删除操作

时间:2012-02-07 04:32:08

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

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,但似乎没有缓存项)。

感谢您的帮助!

2 个答案:

答案 0 :(得分:3)

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

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

答案 1 :(得分:1)

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

CacheOutputAttribute.ChildActionCache

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

但是我并不是100%确定这是你的情况,因为你没有做任何儿童行动缓存。