HttpClient (System.Net.Http.HttpClient) クラスを使用して Web サービスに文字列をポストするポータブル クラス ライブラリ (.NET 4.5 および Windows Phone 8.1 を対象とする) にクラスがあります。このサービスでは、リクエストにAcceptヘッダーを設定して、次のように API バージョンを指定する必要があります。
Accept: vnd.servicehost.v1+json
私はこのように私のクラスでこれを試しました:
_httpClient.DefaultRequestHeaders.Add("Accept", "vnd.servicehost.v1+json");
また、Accept ヘッダーが無効であることを示す FormatException がスローされます。だから私はこのように設定してみます:
_httpClient.DefaultRequestHeaders.Accept.Add(new MediaTypeWithQualityHeaderValue("vnd.servicehost.v1+json"));
そして、それでも FormatException がスローされます。この回答を見つけて、次のTryAddWithoutValidation()
ような方法を試してみることにしました。
_httpClient.DefaultRequestHeaders.TryAddWithoutValidation("Accept", "vnd.servicehost.v1+json");
最後に、FormatException を受け取りません。post メソッドは、.NET 4.5 ユニット/統合テスト プロジェクト内から呼び出すと機能します。期待していたデータで 200 を返します。しかし、Windows Phone 8.1 (またはエミュレーター) から同じメソッドを呼び出すと、サービスは、要求で指定したバージョンが無効であることを通知する応答を返します。
Fiddler で Windows Phone エミュレーターからのトラフィックを表示して、実際の要求がどのように見えるかを確認する方法がわかりません。私の推測では、Accept ヘッダーは追加されません。ベテランの Windows Phone 開発者が、私が犯している明らかな間違いを認識できることを願っています...