なか日記

一度きりの人生、楽しく生きよう。

WebAPIのパラメータにstringの変数を指定してたら思ったようにバインディングしてもらえなかった件

WebAPIでこんな感じのメソッドを用意してました。

public HogeApiModel Post([FromBody]string message)

そんで、APIのテストしようとFiddlerからRequestBodyに「message=hogehoge」をセットしてPOSTするのですが、なぜかmessageにバインディングしてくれません。

Fiddlerの使い方が悪いん?とか悩むこと1時間、何気にググってみたら同じ事で悩んでる人がいました。

詳しい動作についてはここで説明されてるみたいですが、ごめんなさい。勉強不足で良く理解できません。MVCとはバインディング時の動作が違うんだなーくらいにしか…

今回のパターンで言うと、RequestBodyの内容は名前を指定せず「=hogehoge」で良かったようです。

結局

以下のようなリクエスト用のクラスを作って、

public class ApiRequestModel
{
    public string Message { get; set; }
}

こんな事しちゃいました。

public HogeApiModel Post([FromBody]ApiRequestModel requestModel)

これはあかんやろ

なんかよくわからんけど、こうやったら上手くいったのでそうしました」って、一番あかんやつですね。

ちゃんと勉強して原因(メカニズム)を理解しないとなぁ。

ASP.NET MVC 4 and the Web API

ASP.NET MVC 4 and the Web API