System.Net.HttpのHttpClientを使用してREST API with "POST" with the following codeを呼び出しています:
using (HttpRequestMessage requestMessage = new HttpRequestMessage(
HttpMethod.Post, new Uri(request)) { })
{
response = await httpClient.PostAsync(request, objectContent);
}
「objectContent」は現在これです-
objectContent = new ObjectContent(jsonContent.GetType(),
jsonContent,
new JsonMediaTypeFormatter());
これがこのようなObjectContentではなくStringContentである場合、どのような違いがあるのでしょうか。
objectContent = new StringContent(content);
objectContent.Headers.ContentType = MediaTypeHeaderValue.Parse("application/json");
どちらも正常に動作します。 JSONなので、StringContentが理にかなっていると思いがちです。ただし、送信されるほとんどすべてのコンテンツが「文字列」であるため、ObjectContentをいつ使用するか。
これがこのようなObjectContentではなくStringContentである場合、どのような違いがあるのでしょうか。
あなたの例では違いはありません。 ObjectContent
は、単にHttpClient
を介して「より広い」範囲のタイプを送信できるようにしますが、StringContent
は、JSONなどのstring
値に対してのみ狭くなります。
StringContent
はByteArrayContent
のスリムなラッパーで、実際にはbyte[]
として渡された値を格納します。 string
を前後に変換する必要がないという利点が得られます。
編集:
JSONを投稿しているという事実を考えると、 HttpClientExtensions.PostAsJsonAsync<T>
を使用して、JSONをより冗長にすることもできます。
await httpClient.PostAsJsonAsync(url, json);
誰かが.NET Core 2.1でPostAsyncによってリクエストを送信する方法を検索する場合:HttpClientにPostAsJsonAsyncメソッドが見つかりませんでしたが、設定を使用したソリューション:
objectContent = new StringContent(content);
objectContent.Headers.ContentType = MediaTypeHeaderValue.Parse("application/json");
.NET Coreでも完全に「仕事をする」。
編集:
さらに、独自のヘッダーを追加する場合は、次のように入力できます。
objectContent.Headers.Add("Your header", "Value");
ObjectContentは、組み込みまたはカスタム記述のフォーマッターを使用して、より複雑なMimeタイプをフォーマットするために使用されます。単純な文字列にもObjectContentを使用しても問題ありません。文字列用に特別に最適化されている可能性があるため、StringContentの方が優れている(IMHOとチェックされていない)パフォーマンスを除いて、それほど大きな違いはありません。