ASP.NET Core MVC 2.0でFromBodyに引数が設定されない

以下のようにコントローラーでAPIを作成したときにcurlから引数のmessageへ値を設定することができずハマったのでまとめます。

namespace WebApplication1.Controllers
{
    [Route("api/[controller]")]
    public class SampleController : Controller
    {
         [HttpPost("create")]
        public async Task<string> CreateMessage([FromBody]string message)
        {
            ...
        }
}

最初はJSONで{"message": "hogehoge"}のような記述をしていたが、これだとmessageに値が設定されなかった。

$ curl -d '{"message": "hogehoge"}' -H "Content-type: application/json"  -XPOST localhost:5000/api/sample/create 

結局以下の通りmessageに設定する値を指定すれば良いことがわかったのでめでたしめでたし。

$ curl -d '"value1"' -H "Content-type: application/json"  -XPOST localhost:5000/api/sample/create 

なお、{"code":"xxxxx", "value":"dummy"}のような複数のフィールドに対応させる場合には対象のPOCOを作成してバインドする必要があります。むしろこの方が直感的で分かりやすかったりしますね。