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);
という感じで。
以上。