我在缓存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配置,网址表单)?
答案 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小时作为缓存时间。