0

我们有一个 Web 应用程序,它调用外部搜索提供程序的 url 来加载搜索结果。每次我们的页面被点击时,它都可以传入一个当前页码。此页码包含在发送给第 3 方的 url 中。我注意到,虽然他们报告了 45 页的结果,但如果我转到包含他们结果的一个页面,然后尝试导航到另一个包含其他结果的页面,则会加载来自第一页的相同结果。

我尝试设置我的 HttpWebRequest 对象以禁用缓存,但我尝试过的一切似乎都不起作用。而且,考虑到由于页码每次 url 都会发生变化,我不认为这真的是一个缓存问题。但这就是有趣的地方。

如果我复制我在代码中检索的 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;
}
4

1 回答 1

0

请尝试以下几行以在两者中设置 no-cacheHttpWebRequestWebResponse

请求

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");
于 2019-03-28T20:09:23.127 回答