4

と を使用DataContractJsonSerializerStringContentて、JSON を Web サービスに送信します。

DataContractJsonSerializer serializer = new DataContractJsonSerializer(typeof(Employee));
MemoryStream ms = new MemoryStream();
serializer.WriteObject(ms, employee);
ms.Position = 0;
StreamReader sr = new StreamReader(ms);
StringContent jsonContent = new StringContent(sr.ReadToEnd(),
                               System.Text.Encoding.UTF8, "application/json");
// later I do HttpClient.PostAsync(uri, jsonContent)

これにより、次の Content-Type ヘッダーが生成されます。

Content-Type: application/json; charset=utf-8

文字セットを省略して、次のヘッダーのみを使用することは可能ですか?

Content-Type: application/json

これを行うオーバーロードは見当たりませんStringContent

4

2 に答える 2

10

StringContent クラスの新しいインスタンスが初期化されるとき

public StringContent(
    string content,
    Encoding encoding,
    string mediaType
)

次の HTTP 要求ヘッダーContent Typeが生成されます。

Content-Type: application/json; charset=utf-8

エンコード部分(charset=utf-8)の存在に注意

部分をエンコードせずContent Typeにヘッダーを構築するには、次のオプションを検討できます。

1) StringContent コンストラクター (文字列)を使用し、 ContentType プロパティを使用してコンテンツ タイプを設定します。次に例を示します。

var requestContent = new StringContent(jsonContent);                
requestContent.Headers.ContentType = new MediaTypeWithQualityHeaderValue("application/json");

また

var requestContent = new StringContent(jsonContent);                
requestContent.Headers.ContentType = MediaTypeHeaderValue.Parse("application/json");

2) ContentType プロパティからエンコーディング部分を削除します。例:

    var requestContent = new StringContent(jsonContent, System.Text.Encoding.UTF8, "application/json");
    requestContent.Headers.ContentType.CharSet = null; 

3)エンコーディング部分をリセットするカスタムJsonMediaTypeFormatter クラスを作成します。

public class NoCharsetJsonMediaTypeFormatter : JsonMediaTypeFormatter
{
    public override void SetDefaultContentHeaders(Type type, System.Net.Http.Headers.HttpContentHeaders headers, System.Net.Http.Headers.MediaTypeHeaderValue mediaType)
    {
        base.SetDefaultContentHeaders(type, headers, mediaType);
        headers.ContentType.CharSet = null;
    }
}
于 2015-05-24T19:14:36.437 に答える