【问题标题】:Windows Phone 8 HttpClient Get method returns strange resultsWindows Phone 8 HttpClient Get 方法返回奇怪的结果
【发布时间】:2015-05-12 20:41:49
【问题描述】:

我正在开发一个 Windows Phone 8 应用程序,它将一些数据发送到执行它并返回结果的服务器。可以随时查询服务器以获取当前执行的状态,可以是初始化、运行或完成。仅当执行处于完成状态时输出才可用。用户可以选择通过按“更新”按钮来检查当前执行状态

XAML

<Button Background="{StaticResource PhoneAccentBrush}" 
        Click="UpdateRunInfo" > Update info</Button>

这是方法

private async void UpdateRunInfo(object sender, RoutedEventArgs e)
    {
        ExecutionItem clicked = ((sender as Button).DataContext as ExecutionItem);
        HttpClientHandler handler = new HttpClientHandler();
        handler.Credentials = new NetworkCredential("username", "password");           
        HttpClient client = new HttpClient(handler);                    
        string Url = "http://somefakeurl.com/server/run/id/status";
        string _status = await client.GetStringAsync(Url);
        clicked.status = _status;
                }

所以问题是这个方法只有在第一次被调用时才能正常工作。之后,无论服务器的实际状态如何,GetStringAsync() 都会返回与第一次调用相同的结果。

我在一个单独的 Windows Phone 项目中尝试过这种方法,结果是一样的。 为了确保服务器正常运行,这次我在桌面应用程序上再次尝试了相同的 C# 代码,它运行良好。

我的理论是,因为我多次发送相同的请求,WP OS 正在缓存最后一个结果并将其返回给我,而不是实际向服务器发出 GET 请求。

为什么 HttpClient 返回缓存状态而不是实际从服务器获取状态?

【问题讨论】:

  • 尝试设置client.DefaultRequestHeaders.IfModifiedSince
  • 服务器是否设置了正确的缓存头?为了避免缓存,只需添加随机查询字符串?qwerty=123456,通常用于“缓存破坏”人们使用当前时间。
  • LB,它成功了!太感谢了 :) !我自己永远也找不到解决方案。

标签: c# windows-phone-8


【解决方案1】:

正如评论的人所建议的那样,这是一个缓存问题。 来自用户 L.B. 的建议设置client.DefaultRequestHeaders.IfModifiedSince解决了问题

【讨论】:

    【解决方案2】:

    正如已经评论过的,这是一个缓存问题(简单地说:您的请求被缓存了,所以您得到了缓存的响应)。 Alexei 的答案可能是最常用的,尤其是使用当前时间作为查询参数。

    注意:小伙伴们,请回答,不要评论,否则问题将保持“未回答”状态。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2019-05-24
      • 1970-01-01
      • 2016-08-24
      • 2014-12-25
      • 1970-01-01
      • 1970-01-01
      • 2018-01-15
      • 2012-08-08
      相关资源
      最近更新 更多