【问题标题】:Xamarin Forms app, HttpClient seemingly caching responses FOREVERXamarin Forms 应用程序,HttpClient 似乎永远缓存响应
【发布时间】:2017-08-10 18:33:42
【问题描述】:

我正处于我的第一个 Xamarin.Forms 应用程序的测试阶段,该应用程序严重依赖 HttpClient 从远程站点检索 JSON 数据。我发现一旦发出请求,响应似乎就会被缓存,并且永远不会检索到更新的数据。我正在像这样初始化 HttpClient:

new HttpClient()
{
  Timeout = new TimeSpan(0, 0, 1, 0),
  DefaultRequestHeaders =
  {
    CacheControl = CacheControlHeaderValue.Parse("no-cache, no-store, must-revalidate"),
    Pragma = { NameValueHeaderValue.Parse("no-cache")}
  }
}

那些请求标头似乎根本没有帮助。如果我将其中一个 URL 放在浏览器中,我会收到带有更新数据的 JSON 响应。服务器端也设置了无缓存头。

知道如何每次都强制提出新请求吗? TIA。顺便说一句,此测试是在 Android 模拟器中完成的。我还不知道 iOS 版本的行为是否类似。

【问题讨论】:

  • 你在使用AndroidHttpHandler吗?

标签: xamarin xamarin.android xamarin.forms


【解决方案1】:

我建议你使用modernhttpclient nuget package,并像这样实现你的android代码:

var httpClient = new HttpClient(new NativeMessageHandler());

此代码适用于 android、iOS 和/或 PCL 中的代码。基本上,这个 nuget 包可确保您使用 HttpClient 的最新平台优化。对于 Android,这是 OkHttp-package,对于 iOS,这是 NSURLSession

这可以帮助您防止提供的 HttpClient 类的任何怪癖,并使用您正在运行的平台为您提供的优化。

不应再发生像您展示的那样的问题。

【讨论】:

  • 我不喜欢你推荐modernhttpclient。它不适用于 HTTP/2 或 SPDY。与 TLS 1.2 网站交谈时也会呕吐。
  • 我明白了。 Xamarin 大学的讲师称这是我培训期间的最佳实践之一,所以我只能假设他们是正确的。我对您描述的事情没有经验,但我们确实有一些相当复杂的 Xamarin 应用程序正在生产中,具有相当复杂(但标准)的 Azure Web 应用程序后端。没有任何问题。
  • 我和@Cheesebaron 有同样的经历。这一切都很好,直到某些版本的 Mono 开始在 Modern 中引起问题。如果应用程序失去连接,它会随机崩溃,然后在连接恢复后重试查询。 github.com/paulcbetts/ModernHttpClient/issues/229 删除现代完全固定。目前为了解决“缓存”问题,我只需添加一个随机生成的 guid 的 '?cachebuster='。这对于在日志文件中定位特定请求也很有用:-)
  • 好提示@cachebuster!
  • 添加随机查询参数是我尝试的第一件事,但没有效果。真是奇怪的行为。不过,ModernHttpClient 为我解决了这个问题。非常感谢 Erik。
猜你喜欢
  • 1970-01-01
  • 2014-07-05
  • 1970-01-01
  • 2012-07-05
  • 1970-01-01
  • 2021-09-22
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多