Windows Phone 8 HttpClient的Get方法返回奇怪的结果

3
我正在开发一个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返回已缓存状态,而不是从服务器实际获取状态?

1
尝试设置 client.DefaultRequestHeaders.IfModifiedSince - L.B
1
服务器是否设置了正确的缓存头?为了避免缓存,只需添加随机查询字符串“?qwerty=123456”,通常人们使用当前时间来进行“缓存破坏”。 - Alexei Levenkov
1
L.B,它成功了!非常感谢 :)!我自己永远找不到解决方案。 - Lakov
2个回答

3

根据评论中的建议,这是一个缓存问题。 用户L.B.提出的设置client.DefaultRequestHeaders.IfModifiedSince解决了这个问题。


0

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

注意:各位,请回答而不是评论,否则问题将保持“未回答”状态。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接