我们有一个网络应用,可以调用外部搜索提供商的网址来加载搜索结果。每次点击我们的页面时,它都可以传入当前页码。此页码包含在发送给第三方的网址中。我注意到,当他们报告45页的结果时,如果我转到包含其结果的其中一个页面,然后尝试导航到另一个包含其他结果的页面,则第一页的相同结果是加载。
我尝试设置我的HttpWebRequest对象来禁用缓存,但我尝试过的所有东西似乎都没有用。并且,考虑到每次由于页码而更改的URL,我不会认为它确实是一个缓存问题。但在这里它变得有趣。
如果我复制我在代码中检索的网址并将其粘贴到Chrome中,则会加载正确的结果。然后我刷新Web应用程序页面,它现在也加载该页面的结果。这对我来说毫无意义。代码在本地运行,但由于它在asp.net中运行,因此它不使用chrome来创建Web请求,为什么会发生这种情况呢?
这是我调用url并返回结果的代码。
public static string FetchPage(string url)
{
//Specify the encoding
Encoding enc = System.Text.Encoding.GetEncoding(1252);
HttpWebRequest.DefaultCachePolicy = new HttpRequestCachePolicy(HttpRequestCacheLevel.Default); ;
//Create the http request
var request = (HttpWebRequest)WebRequest.Create(url);
request.CachePolicy = new HttpRequestCachePolicy(HttpRequestCacheLevel.NoCacheNoStore);
//Create the http response from the http request
var httpWebResponse = (HttpWebResponse)request.GetResponse();
//Get the response stream
var responseStream = new StreamReader(httpWebResponse.GetResponseStream(), enc);
//Read the response stream
string htmlStream = responseStream.ReadToEnd();
//Close the web response
httpWebResponse.Close();
//Close the response stream
responseStream.Close();
return htmlStream;
}
答案 0 :(得分:0)
请尝试以下几行以在HttpWebRequest
和WebResponse
中设置无缓存
请求
Request.Headers.Set(HttpRequestHeader.CacheControl, "max-age=0, no-cache, no-store");
Request.CachePolicy = new System.Net.Cache.RequestCachePolicy(System.Net.Cache.RequestCacheLevel.NoCacheNoStore);
响应
Response.Headers.Add(HttpRequestHeader.CacheControl, "no-cache");