2017.9.19
2020.1.7

リクエストでJSONデータを受け取る方法

POSTリクエスト時にJSONデータを受け取る方法についてです。以前は用意したモデルに勝手にバインディングしてくれたと思うのですが、ASP.NET Coreではやってくれずにちょっとハマってしまったので、その時のメモになります。

目次

  • 送信(クライアント)側
  • 受信(サーバ)側
  • 参考リンク

送信(クライアント)側

動作確認に使用したプロジェクトはVisual Studio 2017の「Reqct.jsとRedux」で新規作成したものになります。


let fetchTask = fetch(`Example/Insert`, {
        method: 'POST',
        headers: {
            'Accept': 'application/json',
            'Content-Type': 'application/json'
        },
        body: JSON.stringify({id: 1, title: 'EXAMPLE'})
    })
    .then(response => response.json())
    .then(data => {
        dispatch({ type: 'RECEIVE_EXAMPLE_INSERT' });
    });
addTask(fetchTask);
dispatch({ type: 'REQUEST_EXAMPLE_INSERT' });

dispatchはRedux特有のメソッドなのでここでは気にしないでください。

受信(サーバ)側

JSONデータを受信するサーバ側のコントローラーとモデルは以下の通りです。


public class ExampleController : Controller
{
    [HttpPost]
    public IActionResult Insert([FromBody] Example example)
    {
        return Json(example);         
    }
}

public class Example
{
    public int id { get; set; }
    public string title { get; set; }
}

JSONデータをこちらで用意したモデルにバインディングさせる際、[FromBody]を指定しないとデータがセットされず、それが原因だと分からないでかなりハマってしまいました。

Coreになったからできなくなったのかどうかは不明ですが、今後は注意したいと思います。

参考リンク

ASP.NET Core】関連記事