2017-08-10 13 views
0

リモートサイトからJSONデータを取得するためにHttpClientに大きく依存している私の最初のXamarin.Formsアプリのテスト段階にあります。リクエストが作成されると、そのレスポンスはキャッシュされているように見え、更新されたデータは決して取得されません。私はこのようにHttpClientを初期化しています:Xamarin Formsのアプリ、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応答が返されます。サーバー側では、no-cacheヘッダーも設定しています。

毎回新しいリクエストをどのように強制することができますか? TIA。このテストは、Androidエミュレータ、btwで行われています。 iOSのビルドが同様に動作しているかどうかはまだ分かりません。

+0

AndroidHttpHandlerを使用していますか? – Cheesebaron

答えて

1

私はあなたがmodernhttpclient nuget packageを使用することをお勧め、とのようにあなたのAndroidのコードを実装したい:このコードは、PCLで、アンドロイドのiOSおよび/またはコードの両方で動作します

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

。基本的に、このナゲットパッケージは、HttpClientに最新のプラットフォーム最適化を使用していることを確認します。 Androidの場合、OkHttp -packageです。これはiOSの場合、です。NSURLSessionです。

これは、提供されたHttpClientクラスの不具合を防止し、実行しているプラ​​ットフォームが提供する最適化を使用するのに役立ちます。

表示されているような問題はもう発生しません。

+1

私はmodernhttpclientを推奨しているのが好きではありません。 HTTP/2またはSPDYでは動作しません。それはTLS 1.2のサイトにも話しかけているときには賞賛されます。 – Cheesebaron

+0

私は参照してください。 Xamarin大学のインストラクターは、トレーニング中にこれをベストプラクティスと呼びました。したがって、私は彼らが正しいと推測することができます。私は、あなたが記述したことについての経験はありませんが、かなり複雑な(しかし標準的な)Azure Web Appバックエンドを使って、かなり複雑なXamarinアプリを生産しています。何の問題もありません。 –

+0

@Cheesebaronと同じ経験をしました。 MonoのいくつかのバージョンがModernに問題を引き起こすまで、それはうまくいった。接続が失われた場合や、接続が復元された後でクエリを再試行した場合、アプリケーションはランダムにクラッシュします。 https://github.com/paulcbetts/ModernHttpClient/issues/229モダンを完全に修正。現在、 "キャッシング"の問題を回避するために、ランダムに生成されたGUIDの '?cachebuster = 'を追加するだけです。特定のリクエストをログファイルに配置するのにも効果的です:-) –

関連する問題