如何缓存HttpResponseMessage返回的图像

时间:2014-08-28 13:12:53

标签: c# .net http caching httpresponse

我在缓存HttpResponseMessage返回的图像时遇到问题。

文件由网址访问:

http://localhost:[service port]/[file GUID]?Adapter=[adapter type]

例如:

http://localhost:59292/b9e7d18a-2eaf-11e4-92e3-8056f2d1ef7b?Adapter=CoolAdapter

我将CacheControl标头添加到HttpResponseMessage:

new CacheControlHeaderValue()
                   {
                       Public = true,
                       MaxAge = TimeSpan.FromSeconds(60)
                   };

响应的两个缓存控制标头都在浏览器(Chrome)中正确显示,但该网址的每次刷新都会执行在服务器上检索图像的方法,而不是从缓存中提供此图片。

我错过了什么(IIS配置,网址表单)?

2 个答案:

答案 0 :(得分:1)

您想要将图像添加到IIS缓存并想知道它为何多次下载?如果您有多个客户端需要相同的资源,则IIS缓存非常有用。

您可以使用(命令行)检查当前缓存:

netsh http show cachestate

您最有可能想要浏览器缓存 - 相同的客户端在短时间内反复请求相同的文件。 以下内容应使浏览器缓存您的图像:

<staticContent>
    <clientCache cacheControlMode="UseMaxAge" cacheControlMaxAge="1.00:00:00" />
</staticContent>
<httpProtocol>
    <customHeaders>
        <add name="Cache-Control" value="public" />
    </customHeaders>
</httpProtocol>

答案 1 :(得分:1)

我使用以下代码:

var age = new TimeSpan(cacheTime, 0, 0);
response.Headers.CacheControl = new CacheControlHeaderValue()
{
    MaxAge = age,
    Public = false,
    NoCache = false,
    Private = true,
};
response.Content.Headers.Expires = DateTime.UtcNow.Add(age);

不确定技巧是Expires部分,还是我使用24小时作为缓存时间。