【发布时间】:2010-10-14 06:32:46
【问题描述】:
我正在使用 WebClient 或 HttpRequest/REsponse 对图像进行 http 调用。
我不确定缓存是如何专门为浏览器工作的,但有没有办法让 WebClient 或 WebHttpRequest 使用浏览器使用的系统“临时 Internet 文件”缓存?
或者,我是否必须编写自己的磁盘缓存器?
【问题讨论】:
我正在使用 WebClient 或 HttpRequest/REsponse 对图像进行 http 调用。
我不确定缓存是如何专门为浏览器工作的,但有没有办法让 WebClient 或 WebHttpRequest 使用浏览器使用的系统“临时 Internet 文件”缓存?
或者,我是否必须编写自己的磁盘缓存器?
【问题讨论】:
您可以通过设置 CachePolicy 属性来指示 WebRequest 使用系统缓存。
以下代码(取自MSDN)将请求缓存一天。缓存存储在当前用户的临时 Internet 文件夹中(至少在 Windows XP 上)。
// Create a policy that allows items in the cache
// to be used if they have been cached one day or less.
HttpRequestCachePolicy requestPolicy =
new HttpRequestCachePolicy (HttpCacheAgeControl.MaxAge,
TimeSpan.FromDays(1));
WebRequest request = WebRequest.Create (resource);
// Set the policy for this request only.
request.CachePolicy = requestPolicy;
HttpWebResponse response = (HttpWebResponse)request.GetResponse();
// Determine whether the response was retrieved from the cache.
Console.WriteLine ("The response was retrieved from the cache : {0}.",
response.IsFromCache);
Stream s = response.GetResponseStream ();
// do something with the response stream
s.Close();
response.Close();
【讨论】:
如果您正在发出 HTTP 请求,并且您希望您的请求在请求的资源已被请求的情况下访问本地缓存,则您必须编写自己的缓存。
有许多潜在的实现。这实际上取决于您期望请求多少不同的资源以及频率。
【讨论】: