如何强制HttpWebRequest在ASP.NET环境中使用缓存?

时间:2010-05-13 11:59:59

标签: .net asp.net caching httpwebrequest

在我的ASP.NET应用程序中,我使用HttpWebRequest来获取我想要缓存的外部资源。请考虑以下代码:

var req = WebRequest.Create("http://google.com/");
req.CachePolicy = new HttpRequestCachePolicy(HttpRequestCacheLevel.CacheIfAvailable);
var resp = req.GetResponse();
Console.WriteLine(resp.IsFromCache);
var answ = (new StreamReader(resp.GetResponseStream())).ReadToEnd();
Console.WriteLine(answ.Length);

HttpWebRequest使用IE缓存,因此当我以普通用户身份运行时(在微型cmd测试应用程序中),数据缓存到%userprofile%\Local Settings\Temporary Internet Files,然后从缓存中读取下一个响应。

我认为当这样的代码在ASP.NET应用程序中运行时,数据将缓存到...\ASPNET\Local Settings\Temporary Internet Files但不是,并且从不使用缓存。

我做错了什么?如何强制HttpWebRequest在ASP.NET环境中使用缓存?

3 个答案:

答案 0 :(得分:1)

您可以在代码中手动使用缓存,如下所示:

 Cache.Insert("request", req, Nothing, DateTime.Now, TimeSpan.FromSeconds(30), TimeSpan.Zero)

您可以使用此方法,就像在web.config中使用缓存一样。

答案 1 :(得分:1)

我知道这是一个旧线程,但另一件需要考虑的问题是ASP.NET应用程序运行的用户帐户的IE安全设置。在我们将远程主机添加到“可信站点”列表之前,HTTP缓存(CachePolicy.Level =默认,HTTP可缓存资源)无法用于我们的应用程序。

本文对我们的缓存疑难解答非常有用:http://blogs.msdn.com/b/ieinternals/archive/2011/03/19/wininet-temporary-internet-files-cache-and-explorer-folder-view.aspx

答案 2 :(得分:0)

我可能错了,但我怀疑HttpWebRequest尊重资源中的缓存标头,无论您的愿望如何。

检查响应标头并确保资源未明确要求不进行缓存。