Skip to main content
 首页 » 编程设计

c#之HttpWebRequest 和 HttpWebResponse 显示旧数据

2024年01月28日29zhwl

更新数据后,当调用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; 

请您参考如下方法:

似乎 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;