【问题标题】:HttpWebRequest and HttpWebResponse shows old dataHttpWebRequest 和 HttpWebResponse 显示旧数据
【发布时间】:2013-08-17 12:18:51
【问题描述】:

更新数据后,当调用 webservice 时,它​​仍然会获取旧数据。仅当我注销应用程序然后再次登录时才会加载新数据。

protected async override void OnNavigatedTo(System.Windows.Navigation.NavigationEventArgs e)
    {
            base.OnNavigatedTo(e);
            parameterValue = this.NavigationContext.QueryString["parameter"];

            Uri UserDetailUrl = new Uri(Constants.WebService.ws_single_user + "?user_id=" + parameterValue);
            HttpWebRequest UserDetailRequest = (HttpWebRequest)HttpWebRequest.Create(UserDetailUrl);
            HttpWebResponse UserDetailResponse = (HttpWebResponse)await UserDetailRequest.GetResponseAsync();
            StreamReader reader = new StreamReader(UserDetailResponse.GetResponseStream());
            string UserDetailString = reader.ReadToEnd();
            reader.Close();
            XDocument XUserDetailDoc = XDocument.Load(new StringReader(UserDetailString));
            if (((XElement)XUserDetailDoc.Element("main")).Element("result").Value == "success")
            {
                txtEmail.Text = ((XElement)XUserDetailDoc.Element("main")).Element("user").Element("email").Value;
                txtFirstName.Text = ((XElement)XUserDetailDoc.Element("main")).Element("user").Element("fname").Value;
                txtLastName.Text = ((XElement)XUserDetailDoc.Element("main")).Element("user").Element("lname").Value;
                txtMobile.Text = ((XElement)XUserDetailDoc.Element("main")).Element("user").Element("mobile").Value;
            }
    }

Windows 8 Phone 应用程序 - 使用 C# 和 XAML

GetResponseAsync 如下:

  public static Task<HttpWebResponse> GetResponseAsync(this HttpWebRequest request)
    {
        var taskComplete = new TaskCompletionSource<HttpWebResponse>();
        request.BeginGetResponse(asyncResponse =>
        {
            try
            {
                HttpWebRequest responseRequest = (HttpWebRequest)asyncResponse.AsyncState;
                HttpWebResponse someResponse = (HttpWebResponse)responseRequest.EndGetResponse(asyncResponse);
                taskComplete.TrySetResult(someResponse);
            }
            catch (WebException webExc)
            {
                HttpWebResponse failedResponse = (HttpWebResponse)webExc.Response;
                taskComplete.TrySetResult(failedResponse);
            }
        }, request);
        return taskComplete.Task;

【问题讨论】:

    标签: c# windows-phone-8 httpwebrequest streamreader httpwebresponse


    【解决方案1】:

    似乎HttpWebRequest 正在返回缓存结果。您有几种方法可以避免这种情况:

    1. 在 URL 中添加一个随机字符串,这样每次访问的 URL 都不一样(所以www.example.com/page 变成了www.example.com/page?random=dsa$fds21)。
    2. 禁用响应缓存,查看要添加到OnNavigatedTo的新代码:

    -

    HttpWebRequest UserDetailRequest = (HttpWebRequest)HttpWebRequest.Create(UserDetailUrl); 
    // Define a cache policy for this request only. 
    HttpRequestCachePolicy noCachePolicy = new HttpRequestCachePolicy(HttpRequestCacheLevel.NoCacheNoStore);
    request.CachePolicy = noCachePolicy;
    

    【讨论】:

    • 你是对的,它正在返回缓存的结果。第一个解决方案对我来说确实很有效。但我宁愿选择第二个。禁用缓存必须是完美的解决方案,但是,我尝试按照指向 MSDN 的链接进行操作,但该解决方案对我不起作用。
    【解决方案2】:

    我面临同样的问题,我通过在我的服务器端添加响应头来解决这个问题..

    response.setHeader("Cache-Control", "no-cache");
    

    也许这对你也有帮助。

    【讨论】:

    • 是的,它确实有帮助.. 这可能是最好的答案.. 因为我完全控制了服务器端,所以我简单地添加了 header("Cache-Control", "no-cache")那里。非常感谢
    【解决方案3】:

    如果您使用自己的 API,请尝试从那一侧关闭缓存。

    【讨论】:

      猜你喜欢
      • 2012-12-01
      • 1970-01-01
      • 2012-02-26
      • 2011-10-07
      • 1970-01-01
      • 2023-03-14
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多