1

更新數據後,當調用web服務時,它仍會提取舊數據。只有當我註銷應用程序然後再次登錄時,纔會加載新數據。HttpWebRequest和HttpWebResponse顯示舊數據

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的手機應用 - 使用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; 

回答

2

我面臨着同樣的問題,我解決了我的服務器端這樣的添加響應頭..

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

可能這也會幫助你。

+1

是的,它確實有幫助..這可能是最好的答案..因爲我完全控制了服務器端,所以我簡單地在那裏添加了頭部(「Cache-Control」,「no-cache」)。 非常感謝 –

4

好像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; 
+0

你是對的,它正在返回緩存的結果。 第一個解決方案對我來說確實有效......但我寧願選擇第二個解決方案。禁用緩存必須是完美的解決方案,但是,我嘗試了下面的鏈接到MSDN,但該解決方案對我無效。 –

+1

@ Win8_learner請檢查最新的答案。 –

1

如果您使用自己的API,請嘗試從該端關閉緩存。

相關問題