如何在客户端上缓存从控制器操作提供的图像

时间:2016-04-30 08:49:20

标签: html asp.net-mvc image caching

设置

我有一个用ASP.NET MVC 5.2.3编写的网站,它显示了许多图像。其中一些图像是静态的,直接在视图中从文件系统提供:

<img src="~/Content/images/StaticImage.jpg?1" />

其余图像来自数据库,并使用控制器操作提供:

控制器

public ActionResult GetDatabaseImage(long rowId, long rowTimestamp)
{
    return this.File(GetDatabaseImage(rowId, rowTimestamp), "image/jpeg");
}

查看

<img src="@Url.Action("GetDatabaseImage", "Image", new { rowId = Model.RowId, rowTimestamp = Model.RowTimestamp })" />

我希望所有这些图像都缓存在客户端上,如果是数据库图像,也要在服务器上缓存,因此我在GetDatabaseImage操作中添加了一个OutputCache属性:

[OutputCache(Duration = int.MaxValue, VaryByParam = "*")]

并在web.config中使用了以下配置:

<system.webServer>
    <staticContent>
      <clientCache cacheControlCustom="public" cacheControlMode="UseMaxAge" cacheControlMaxAge="365.00:00:00" />

问题

缓存适用于静态图像,对于数据库图像同样不能说。以下是Chrome Dev工具在我访问页面时显示的内容(在已经加载一次之后)。

如您所见,静态图像在客户端上正确缓存,并且没有建立服务器连接,但对于数据库映像,它仍然检查服务器以查看图像是否已被修改。我不希望它这样做,因为我已经指定了一个cachebuster参数(rowTimestamp)。

问题

如何使数据库图像的行为方式与静态图像相同?

0 个答案:

没有答案