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,但似乎没有缓存项)。
感谢您的帮助!
答案 0 :(得分:3)
我最终使用了这段代码,效果很好!
答案 1 :(得分:1)
我不完全确定你的情况,但是我发现了关于视图的子操作:他们使用自己的缓存(不是System.Web.HttpContext.Current.Cache),你可以通过它们访问 静态成员
CacheOutputAttribute.ChildActionCache
子操作的缓存有相当复杂的键,我无法计算。 所以,我最终得到了一个解决方案,将新变量(例如版本或时间戳)添加到我的模型中,并将其作为参数传递给action方法;所以我可以通过更改此属性来使我的缓存无效。
但是我并不是100%确定这是你的情况,因为你没有做任何儿童行动缓存。