HttpWebRequest的奇怪缓存问题

时间:2012-08-28 12:26:09

标签: asp.net httpwebrequest

我们有一个网络应用,可以调用外部搜索提供商的网址来加载搜索结果。每次点击我们的页面时,它都可以传入当前页码。此页码包含在发送给第三方的网址中。我注意到,当他们报告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;
}

1 个答案:

答案 0 :(得分:0)

请尝试以下几行以在HttpWebRequestWebResponse中设置无缓存

请求

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");