C# HttpWebRequest和HttpWebResponse显示旧数据

C# HttpWebRequest和HttpWebResponse显示旧数据,c#,windows-phone-8,httpwebrequest,streamreader,httpwebresponse,C#,Windows Phone 8,Httpwebrequest,Streamreader,Httpwebresponse,在更新数据之后,当调用webservice时,它仍然会获取旧数据。只有当我注销应用程序,然后再次登录时,才会加载新数据 protected async override void OnNavigatedTo(System.Windows.Navigation.NavigationEventArgs e) { base.OnNavigatedTo(e); parameterValue = this.NavigationContext.Quer

在更新数据之后,当调用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手机应用程序-使用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;
公共静态任务GetResponseAsync(此HttpWebRequest请求)
{
var taskComplete=new TaskCompletionSource();
request.BeginGetResponse(asyncResponse=>
{
尝试
{
HttpWebRequest responseRequest=(HttpWebRequest)asyncResponse.AsyncState;
HttpWebResponse someResponse=(HttpWebResponse)responseRequest.EndGetResponse(asyncResponse);
taskComplete.TrySetResult(someResponse);
}
捕获(WebException webExc)
{
HttpWebResponse failedResponse=(HttpWebResponse)webExc.Response;
任务完成。TrySetResult(失败响应);
}
},请求);
返回taskComplete.Task;

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

  • 向URL添加随机字符串,以便每次访问不同的URL(因此
    www.example.com/page
    变为
    www.example.com/page?random=dsa$fds21
  • 禁用响应缓存,请参阅要添加到
    OnNavigatedTo
    的新代码:
  • -


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

  • 向URL添加随机字符串,以便每次访问不同的URL(因此
    www.example.com/page
    变为
    www.example.com/page?random=dsa$fds21
  • 禁用响应缓存,请参阅要添加到
    OnNavigatedTo
    的新代码:
  • -


    我也面临同样的问题,我通过在服务器端添加响应头解决了这个问题,如下所示

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

    可能这也会对您有所帮助。

    我也面临同样的问题,我通过在服务器端添加响应头解决了这个问题,如下所示

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

    这可能也会对您有所帮助。

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

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

    您是对的,它返回了缓存结果。。第一种解决方案对我来说确实非常有效。。但我更愿意使用第二种解决方案。禁用缓存没有任何好处o是一个完美的解决方案,但是,我尝试了跟踪指向MSDN的链接,但该解决方案对我不起作用。你是对的,它返回了缓存结果。第一个解决方案对我来说确实非常有效。但我宁愿选择第二个。禁用缓存必须是一个完美的解决方案,但是,我尝试了跟踪指向MSDN的链接,但是这个解决方案对我不起作用。是的,它确实有帮助。这可能是最好的答案。因为我完全控制了服务器端,我简单地在那里添加了标题(“缓存控制”,“无缓存”)。谢谢。是的,它确实有帮助。这可能是最好的答案。因为我完全控制了服务器端,我简单地添加了标题(“缓存控制”,“无缓存”),谢谢