HttpWebRequest和HttpWebResponse显示旧数据

更新数据后,当调用Web服务时,它仍然会获取旧数据。 只有在我注销应用程序然后再次登录时才会加载新数据。

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 – 使用C#和XAML

GetResponseAsync如下:

  public static Task GetResponseAsync(this HttpWebRequest request) { var taskComplete = new TaskCompletionSource(); 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; 

我面临同样的问题,我解决了在我的服务器端添加响应头像这样..

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

也许这对你也有帮助。

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

  1. 向url添加随机字符串,因此每次都会访问不同的url(因此www.example.com/page变为www.example.com/page?random=dsa$fds21成为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; 

如果您使用自己的API,请尝试从该方面关闭缓存。