.NET Coreを使用して新しいプロジェクトを開始しました。 Web APIコントローラーと関連メソッドを追加しました。 Postmanを使用して、JSONオブジェクトを作成し、コントローラーメソッドにポストしました。 JSONオブジェクトは、コントローラーメソッドのObjectパラメーターと正確に一致することに注意してください。
デバッグモードでは、オブジェクトが表示されます。nullではなく、プロパティがありますが、prop値はデフォルトでその代表型、0
for int
など。
この動作はこれまで見たことがありません…ですから、まったく同じコードとオブジェクトを取得し、Web API 2コントローラーを備えたMVCプロジェクトに複製しましたが、完全に機能します。
何が欠けていますか?POST JSONと.NET Coreのモデルバインドはできませんか?
この記事を読むと、フォームPOSTまたはクエリ文字列変数として送信する場合を除き、私はうまくいかないようです。
https://lbadri.wordpress.com/2014/11/23/web-api-model-binding-in-asp-net-mvc-6-asp-net-5/
JSON:
{
"id": "4",
"userId": "3"
"dateOfTest": "7/13/2017"
}
方法:
[HttpPost]
[Route("test1")]
[AllowAnonymous]
public IActionResult Test(Class1 data)
{
return Ok();
}
次のようにFromBody属性を使用して、パラメーターを本文からのものとしてマークする必要があります。
[HttpPost]
[Route("test1")]
[AllowAnonymous]
public IActionResult Test([FromBody] Class1 data)
{
return Ok();
}
Postmanのコンテンツタイプとしてapplication/jsonを使用していることを確認する必要があります。
その結果:
プロパティセッターも公開されていることを確認してください。
public class Person
{
public String Name;
public Int32 Age;
}
私もこれに苦労していたので、受け入れられた答えではなく、自分に必要なアイテムを1つ共有すると思ったので、{get;クラスの各属性に次のように設定します。}
public class LogString{
public string val {get; set;}
public string data {get; set;}
}
残りは同じでした:
[HttpPost]
public void Post([FromBody] LogString message)
{
Console.WriteLine(message.val);
}
それを追加した後、動作し始めました。
私はこの問題に数時間苦労してきましたが、既存のソリューションはどれもうまくいきませんでしたが、着信インスタンスのクラス用のパブリックなパラメーターレスコンストラクターがないことがわかりました。この場合、 Class1
は、コンストラクターのみを保護し、パラメーターは常にnullでした。それが誰かを助けることを願っています。