C#でJSONフォーマットのWebAPIを呼び出したいと思ったのですが、ちょっとてこずったので備忘録として挙げておきます。
調べてみるとHTTP通信にはHttpClientが便利という記事が多かったので私もHttpClient(.Net 4.5以上ですが)を使ってみました。
また、今回呼び出したいWebAPIはリクエストのbody部にjsonフォーマットのパラメータを指定するAPIだったのでC#のJSONのシリアライズ(文字列)の方法を調べてみました。
結果、JavaScriptSerializerというクラスを使うと文字列にシリアライズできそうだったのでJSONのシリアライズにはJavaScriptSerializerを使っております。
※JavaScriptSerializerって名前にはちょっとひっかかりますが、でもJSONってJavascript Object Notationの略だから名前的には正しいんだろうな。
参照設定は、
- System.Net.Http;
- System.Web.Extensions
を追加する必要があります。
PostメソッドのWebAPIを呼び出すコードはこんな感じになりました。
using System; using System.Collections.Generic; using System.Text; using System.Net.Http; using System.Collections; using System.Web.Script.Serialization; namespace HttpClientSample { class Program { static void Main(string[] args) { var client = new HttpClient(); // Basic認証を使うときはこんな感じでヘッダー部を設定 var byteArray = Encoding.ASCII.GetBytes(string.Format("{0}:{1}", "user", "password")); client.DefaultRequestHeaders.Authorization = new System.Net.Http.Headers.AuthenticationHeaderValue("Basic", Convert.ToBase64String(byteArray)); var param = new Hashtable(); param["hoge"] = 123; // 数値型のパラメータ param["foo"] = "test"; // 文字列型のパラメータ var serializer = new JavaScriptSerializer(); var json = serializer.Serialize(param); Console.WriteLine(json); var content = new StringContent(json); var response = client.PostAsync("http://hogehoge/api/api_name", content).Result; Console.WriteLine(response ); } } }
感想
HttpClientでHTTPリクエストのコーディングが楽になったという記事が多かったですがWeb系開発で使われる言語と比べるとそうでもないような気がします。
HttpClientは非同期処理に対応しているとのことでしたが awaitの指定とかTaskクラスの使い方とかよく分かっていません。
時間があるときにきちんと勉強しておきたいと思います。
C#の進化のスピードは速いのでちょっと勉強しないでいるとすぐにおいて行かれますね。
私の場合C#の勉強に関しては、
- とりあえず使いたい機能をネットで調べてみる
- 機能について理解できれば自分のやりたいコードに落としてみる
- よく理解できていなければC#の書籍できちんと勉強しなおしてみる
という手順を踏むのがこのところの流れになっています。
機能に関してきちんと理解しておきたい場合はパーフェクトC#
改訂3版 パーフェクトC# (PERFECT SERIES 1)
- 作者: 斎藤友男,醍醐竜一
- 出版社/メーカー: 技術評論社
- 発売日: 2013/05/08
- メディア: 大型本
- この商品を含むブログ (4件) を見る
を読むことが多いです。C#の技術書はたくさん出ていますがパーフェクトC#は比較的最近の機能についてまでカバーされているのでいいですね。
追記
感想で、awaitとかTaskの使い方がよく分かっていませんと書きましたが上記のパーフェクトC#を読んできちんと勉強してみました。
Task,await,asyncといったキーワードの使い方は、それほど難しい機能ではありませんでしたが、未知のキーワードが出てくるとついつい億劫な気持ちになって後回しにしてしまいますね・・・