简体   繁体   English

HttpWebRequest和HttpWebResponse显示旧数据

[英]HttpWebRequest and HttpWebResponse shows old data

After updating the data, when the webservice is called, it still fetches old data. 更新数据后,在调用Web服务时,仍会获取旧数据。 New data is loaded only when I logout of the app and then login again. 仅当我注销该应用程序然后再次登录时,才会加载新数据。

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 App - using C# and XAML Windows 8电话应用程序-使用C#和XAML

The GetResponseAsync is as follows: 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;

It seems like HttpWebRequest is returning cached result. 似乎HttpWebRequest正在返回缓存的结果。 You got a few ways to avoid that: 您有几种方法可以避免这种情况:

  1. Add a random string to the URL, so a different URL is accessed every time (so www.example.com/page becomes www.example.com/page?random=dsa$fds21 ). 在URL中添加随机字符串,以便每次都访问不同的URL(因此www.example.com/page变为www.example.com/page?random=dsa$fds21 )。
  2. Disable the response cache, see new code to be added to OnNavigatedTo : 禁用响应缓存,请参阅要添加到OnNavigatedTo新代码:

- --

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

I am facing same problem, and i solved by add response header in my server side like this.. 我面临着同样的问题,我通过在服务器端像这样添加响应头来解决。

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

may be this will help you too. 也许这也会对您有帮助。

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

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM