OITA: Oika's Information Technological Activities

@oika 情報技術的活動日誌。

C# HttpClientでJSONデータをPOSTする

HttpClientクラスを使って、Web APIなんかにJSONでデータをPOST送信する。

んなもん、なんでもないやろーと思ってテキトーにやろうとしたら、あれれあれれと、意外とはまってしまった。
ので一応備忘メモ。

↓こんなPerson的なJSONを送りたいとして

{  
  "age" : 20,  
  "name" : "太郎"  
}

答えから書いてしまうと、↓こう。

var json = "{ \"age\" : 20, \"name\" : \"太郎\"  }";  

using (var client = new HttpClient())  
{  
    var content = new StringContent(json, Encoding.UTF8, "application/json");  

    var response = await client.PostAsync("http://somehost/someapi", content);  
    ...  
}  

まあJSON手書きとかはあんまりやりたくないだろうから、そのへんはJson.NET使ってシリアライズするとか。

[JsonObject]  
public class Person  
{  
    [JsonProperty("age")]  
    public int Age { get; private set; }  

    [JsonProperty("name")]  
    public string Name { get; private set; }  

    public Person(int age, string name)  
    {  
        this.Age = age;  
        this.Name = name;  
    }  
}  

↑これを↓こう。

var person = new Person(20, "太郎");  
var json = JsonConvert.SerializeObject(person);  

using (var client = new HttpClient())  
{  
    var content = new StringContent(json, Encoding.UTF8, "application/json");  

    var response = await client.PostAsync("http://somehost/someapi", content);  
    ...  
}  

その他、Acceptヘッダとかつける必要があれば

var accept = new MediaTypeWithQualityHeaderValue("application/json");  
client.DefaultRequestHeaders.Accept.Add(accept);  

という感じで。

以上。