2016-09-05 4 views
1

UWPとHttpClientで興味深い機能が1つ見つかりました.WebRequestでも動作します。 すべてのHTTPリクエストは "If- *"ヘッダーを送信します。私はUWPとWPFのアプリを試しました。 "If-"ヘッダーをサポートしていないAzureファイルストレージにリクエストを送り、ヘッダーが送信されるとエラー400を返します。だからここに私のコード:UWP HttpClientが "If"ヘッダーを無効にする

HttpClient client = new HttpClient(); 
var response = await client.GetAsync("LINK_TO_AZURE_FILE_STORAGE_IMAGE"); 

非常に単純に、2つのアプリに似ています。結果 - WPFアプリケーションは "If- *"ヘッダを送信しません。UWPはヘッダを送信します。つまり、私はUWPアプリケーションでファイルストレージを使用することができないということです。エラー400が発生しました。

私の質問は - このキャストを無効にすることはできますか?あなたのご注意ありがとう

答えて

2

UWPアプリでHttpClientを使用している間、デフォルトで自動的にローカルHTTPキャッシュが使用されます。初めて、あなたはコードがうまくいくはずです。そして、あなたが最初に応答したとして400 Errorを取得します、それはキャッシュデータが含まれており、それ以降のすべての要求は次のようにデフォルトでは、このキャッシュを使用します。
enter image description here

この問題を解決するには、我々はHttpBaseProtocolFilterクラスにWindows.Web.Http.HttpClientクラスを使用してHttpCacheControlすることができますクラスを使用して、次のようにキャッシュを無効にします。

このメソッドを機能させるには、ローカルHTTPキャッシュがないことを確認する必要があります。できるだけHttpCacheReadBehavior.MostRecentがそのままローカルHTTPキャッシュを使用することを表します。だから、最初にアプリをアンインストールして、アプリでHttpClient client = new HttpClient();を使用しない方がよいでしょう。

更新:

は、Windows周年記念アップデートSDKから始めて、NoCache命令はHttpCacheReadBehavior列挙に追加された新しい列挙値があります。 ReadBehaviorWriteBehaviorを組み合わせることで、さまざまなキャッシュ関連の動作を実装できます。私たちは、ローカルキャッシュを使用しない場合は、私たちはHttpCacheReadBehavior.NoCacheReadBehaviorを設定することができますように:

var filter = new Windows.Web.Http.Filters.HttpBaseProtocolFilter(); 
filter.CacheControl.ReadBehavior = Windows.Web.Http.Filters.HttpCacheReadBehavior.NoCache; 

var httpClient = new Windows.Web.Http.HttpClient(filter); 
+0

うわー!たくさんありがとう!おそらくあなたが知っている - この機能やバグですか? Imageコントロールでは、Httpにアクセスできないためです。 Image.SourceへのURIの送信はお勧めできませんが、誰かがその機能を必要とし、問題を抱えているかもしれません... – FoxNet

+0

これはUWPの機能であり、Windows Anniversary Update SDK以来、新しい列挙値 "NoCache" HttpCacheReadBehavior列挙に追加します。詳細については、[ここ](https://wpdev.uservoice.com/forums/110705-universal-windows-platform/suggestions/12320304-httpclient-clear-cache)を参照してください。 –

関連する問題