Asp.net mvc 3 如何清除嵌入正在更新的Web提要项中的客户端缓存图像

Asp.net mvc 3 如何清除嵌入正在更新的Web提要项中的客户端缓存图像,asp.net-mvc-3,caching,syndication,Asp.net Mvc 3,Caching,Syndication,我正在以图片的形式发布包含嵌入到提要项中的图表的Web提要,并使用MVC操作,/RSS\u Img/filename返回给轮询Web提要的客户端 一些图表与提要项一起更新,我希望在服务器端修改后,客户端重新加载映像(我可以控制图表何时更新,因为这是由另一个控制器的操作执行的)。 同时,我不想避免在客户端进行缓存,因为这会给我带来惊人的带宽增长。 我最好的选择是什么?我曾考虑过以下几点: 显然,更改图像名称-但这是不可接受的,因为它会破坏可能作为邮件转发的提要项-或者在我保留旧版本的情况下大大增

我正在以图片的形式发布包含嵌入到提要项中的图表的Web提要,并使用MVC操作,
/RSS\u Img/filename

返回给轮询Web提要的客户端

一些图表与提要项一起更新,我希望在服务器端修改后,客户端重新加载映像(我可以控制图表何时更新,因为这是由另一个控制器的操作执行的)。

同时,我不想避免在客户端进行缓存,因为这会给我带来惊人的带宽增长。

我最好的选择是什么?我曾考虑过以下几点:

  • 显然,更改图像名称-但这是不可接受的,因为它会破坏可能作为邮件转发的提要项-或者在我保留旧版本的情况下大大增加存储大小
  • 映射可能更新的联合项目,并在检索图像的操作中,设置
    Response.Cache.SetCacheability(HttpCacheability.Server)
    仅针对这些项目[实际上我认为我应该将cacheability设置为none,因为我认为缓存
    RSS\u Img
    操作的结果没有什么好处:它基本上只是加载并返回文件本身。] 这将要求我从SQL server(我正在处理大量图表图像)检索要刷新(或冻结)的图像的id,这将给WebApp增加相当大的负担。
    此外,我无法始终确定可能要更新的项目是什么,因此,这种方法并没有覆盖100%的需求
我正在寻找的解决方案是找到一种简单的方法,在我更改图像文件时使缓存无效-我可以轻松地使用类似于
HttpResponse.RemoveOutputCacheItem(“/RSS\u Img/”+fileName.Value)
:但这似乎只影响服务器缓存。


我脑子里没有其他选择,还有其他实用的方法吗?

传统的解决方案是使用伪参数引用图像,如
。无论何时更新图表,都要使用新值更新指向它的链接。通常,上次更新的日期用作参数值。

这是一个很好的进步,但不能解决以电子邮件形式转发提要项的情况:这样缓存参数就不会更改,我想不会刷新图像-我说的对吗?。更准确地说:收件人在接收邮件时将获得更新的图像(因为他这边没有缓存),但之后将无法对其进行更新。服务器将忽略查询参数。所以它只是链接你发送给别人的任何其他图像链接——如果你的浏览器缓存了它,你会得到旧版本,否则你会得到最新版本。将您的缓存头设置为合理的值,它应该可以正常工作。抱歉Jeremy没有解释:一旦用户收到通过电子邮件转发的提要项,链接本身将不会更新,下载的第一个图像也不会更改-它将是静态的。我希望能在服务器端工作。我正在研究ETag,但仍然需要找出如何使用它们