ASP.NETのWebAPI
ASP.NETでWebAPIのプロジェクトを作るとValuesController.csというWebApiコントローラーがデフォルトで用意されていますが、今回はそれで検証してみました。
なお、当方の環境は大人の事情でASP.NET MVC 5ですが、たぶんCoreでも同じような感じじゃないかと思われます。
// POST api/values
public void Post([FromBody]string value)
{
var hoge = value;
}
PowerShellでPostする
PowerShellでWebAPIを叩く場合、「Invoke-WebRequest」コマンドレットが使えます。
今回はPostメソッドを叩きたいので、-Methodパラメーターに「Post」を指定しています。
Invoke-WebRequest -Uri http://localhost:49298/api/values -Method 'Post' -Body @{value="hello"}
Invoke-WebRequestでPostした結果:value = null
ASP.NETのWebAPIアプリをデバッグ実行して、Invoke-WebRequestコマンドレットを実行してみます。
おや、valueがnullになってますね?
-Bodyパラメーターとして、value="hello"を指定していたので、"hello"という文字列が渡ってくるかなと思ったのですが・・・
パラメーターをJsonで渡す場合、WebAPI側にJsonと合わせたクラスを用意する必要がある
結論ですが、WebAPI側にパラメーターに合わせたクラスを用意してあげる必要があるみたいです。
下記のように、Postメソッドのパラメーターをクラスにしてみたところ、無事valueが取得できました。
public class ValuesController : ApiController
{
// POST api/values
public void Post([FromBody]JsonParam param)
{
var hoge = param.value;
}
}
public class JsonParam
{
public string value { get; set; }
}
現場からは以上です。