2010-09-24 91 views
0

我想缓存在MVC2控制器动作像这样的输出:MVC的OutputCache问题

[OutputCache(Duration = 600, VaryByParam = "id", Location=System.Web.UI.OutputCacheLocation.Server)] 
     public FileContentResult GetImage(int id) { 
} 

当用户上传一个新的形象,为自己的图标我用下面的行缓存失效:

HttpResponse.RemoveOutputCacheItem("/MyPage/GetImage/" + u.UserID.ToString()); 

然而,这似乎并没有工作,我想不通为什么

+0

您的代码看起来正确。你可以验证'u.UserID.ToString()'返回正确的ID吗? – Buildstarted 2010-09-24 13:51:08

+0

是的,它肯定会返回正确的ID – Gazeth 2010-09-28 08:38:44

回答

0

我不知道这一点,但是,即使您使用“位置=服务器”它可能仍然缓存在我看来,在cli ent(就好像根本没有outputCache属性一样),除非还有“NoStore = true”。

由于这样的问题可能是客户端缓存的结果。

您可以通过使用调试工具(如fiddler)或内置于浏览器中的调试工具检查客户端请求来检查是否属于这种情况。

+0

要验证这一点,请使用浏览器的调试工具网络(net)视图并查找GetImage调用的304状态。 304意味着浏览器不会回到服务器。为了克服这个问题,你可以添加一个时间戳作为一个额外的参数。 – 2012-03-21 19:36:13

+0

@Steve尽管添加一个额外的参数肯定会强制直接请求图像,但即使图像未被更改也是如此,这与他在第一个位置放置OutputCache属性的原因相反 – 2012-03-21 19:45:48

+1

我了解您的逻辑,并且你是正确的,但是当浏览器发出请求时服务器可能会使用它的缓存机制。我猜 - 现在不能测试它。 – 2012-03-21 20:25:58