kazuakix の日記

Windows Phone とか好きです

Content-Type を指定してデータを書き込む

例えば HTTP で JSON を書き込むとき、Content-Type をちゃんと設定しておきたい事があります。(と言うか、普通は設定すると思います)
 
Content-Type を指定るには HttpClientDefaultRequestHeaders.Accept プロパティに追加する。もしくは HttpStringContentHeaders.ContentType プロパティをセットすれば大丈夫です。

var uri         = "http://~"; // 書き込み先
var requestJson = "";          // 書き込む JSON データ

using (var req = new HttpClient())
{
    // Content-Type 設定
    req.DefaultRequestHeaders.Accept.Add(
        new HttpMediaTypeWithQualityHeaderValue("application/json"));
    
    using (var reqBody = new HttpStringContent(requestJson))
    {
        // こっちでも Content-Type 設定しても OK
        //reqBody.Headers.ContentType 
        //    = new HttpMediaTypeHeaderValue("application/json");
        using (var res = await req.PutAsync(uri, reqBody))
        {
            if (res.IsSuccessStatusCode)
            {
                // 成功
            }
        }
    }
}

前者に追加するときは HttpMediaTypeWithQualityHeaderValue 、後者は HttpMediaTypeHeaderValue と微妙に型が違うので注意が必要です。(一瞬 なんでエラーになっているのかわかりませんでした)