HttpClientでContent-Typeを設定できません。私はこの質問に続けました: HttpClientリクエストのContent-Typeヘッダーをどのように設定しますか? しかし、まだ運がありません。
String rcString = JsonConvert.SerializeObject(new RoadsmartChecks() { userguid = user_guid, coords = coordinates, radius = (radius * 100) + "" }, ROADSMART_JSON_FORMAT, JSONNET_SETTINGS);
HttpClient c = new HttpClient();
c.BaseAddress = new Uri(BASE_URL);
c.DefaultRequestHeaders.TryAddWithoutValidation("Content-Type", "application/json"); //Keeps returning false
c.DefaultRequestHeaders.TryAddWithoutValidation("Authorization", hash_aes);
c.DefaultRequestHeaders.TryAddWithoutValidation("Roadsmart-app", Constant.APP_ID);
c.DefaultRequestHeaders.TryAddWithoutValidation("Roadsmart-user", user_guid);
c.DefaultRequestHeaders.Accept.Add(new MediaTypeWithQualityHeaderValue("application/json"));
HttpRequestMessage req = new HttpRequestMessage(HttpMethod.Post, BASE_URL + URL_CHECKS + "/fetch");
req.Content = new StringContent(rcString);
await c.SendAsync(req).ContinueWith(respTask =>
{
Debug.WriteLine("Response: {0}", respTask.Result);
});
Flurlライブラリを使用してみましたが、「Content-Type」を追加しようとするとクラッシュします。
misused header name content-type
では、どうすればそれを強制して、本当に追加できるのでしょうか。前もって感謝します。
あなたはこれを試すべきだと思います
_req.Content = new StringContent(rcString, Encoding.UTF8, "application/json");
_
このリンクをチェックアウト:
HttpClientリクエストのContent-Typeヘッダーをどのように設定しますか?
この行を削除してc.DefaultRequestHeaders.TryAddWithoutValidation("Content-Type", "application/json");
をチェックし、
UPDATE:デフォルト以外のコンテンツタイプについては 新しい回答 を参照してください
Flurlでは、PostJsonAsync
のようなメソッドのContent-Typeをapplication/jsonに設定する必要はありません。この場合、これがデフォルトのコンテンツタイプであり、設定されます。
これに対するFlurlの最新かつ最大の答えは pgrade です。 2.0では、ヘッダーdeptにいくつかの拡張機能が導入されています。
それらはもはや検証されていません。 Flurlは内部でTryAddWithoutValidation
を使用するようになったため、WithHeader(s)
メソッドで「誤用されたヘッダー名」エラーが発生することはありません。 (私は常に検証動作が少し過保護であることを発見しました。)
流暢な呼び出しでは、FlurlClient
レベルではなく個々のリクエストレベルで設定されるため、クライアントを再利用するときに 同時実行の問題 に遭遇することはありません。
ヘッダー名ではハイフンが一般的ですが、C#識別子では使用できないため、アンダースコアがハイフンに変換される 新しい規則 があり、複数を指定するときにオブジェクト表記をあきらめる必要はありません。
url.WithHeaders(new { Content_Type = "foo", ... }