本題
★実装の確認
プロジェクトの作成が完了すると、いくつかのWeb APIが実装されたValuesコントローラーが生成されます。今回の舞台は、POSTメソッドなので、POSTメソッドの処理に注目します。
// POST api/values [HttpPost] public void Post([FromBody] string value) { }
Bodyから受け取ったパラメータをString型のValue変数に格納して、メソッド内の処理に受け渡すという感じの実装が見て取れます。
★うまく取得できない例
では、さっそく、ここにJSON形式のデータを送り込んでみようと思います。
Jsonはこんな感じです。
{ "Root":{ "key1": "value", "key2": 999 } }
何やらエラーメッセージが返ってきました。これは、おそらく、Stringを待ち受けたけど、パースできない文字列({←これ)が来たことによるエラーです。
"Unexpected character encountered while parsing value: {. Path '', line 1, position 1."
★うまく取得できる例
うまくJsonの値を受けとるためには、あらかじめ、Jsonと同じ構造のクラスを用意する必要があります。今回の例の場合、Rootの子要素として、Key1とKey2があります。この親子関係を表現するクラスを用意し、そのクラスの型で引数を定義すればよいらしいです。
ということで、Jsonと同じ構造を持つクラスを作成する必要がありますが、一つ一つ作っていくのは結構面倒くさいです。そんな時には、便利なVisual Studioの機能や、QuicktypeというOSSを活用して楽をしようと思います。
www.kinakomotitti.net
今回は、Visual Studioの機能でサクッと作成してみました。作成したクラスは、以下のようになります。
public class Rootobject { public Root Root { get; set; } } public class Root { public string key1 { get; set; } public int key2 { get; set; } }
このクラスを使って、Postメソッドを書き換えてみます。
// POST api/values [HttpPost] public void Post([FromBody] Rootobject value) { }
修正ができたので、もう一度、同じリクエストを送信してみます。そして、正しく値が受け取れているかをデバッグで確認します。
受け取れてそうですね!