私はフィドルからPOSTを送信しています:
POST http://localhost:55924/api/Product HTTP/1.1
User-Agent: Fiddler
Host: localhost:55924
Content-Type: application/json; charset=utf-8
Content-Length: 84
{"Ean":"1122u88991","Name":"Post test","Description":"Post test desc"}
ただし、Postメソッドは常にnullになります。
// POST api/Product
[HttpPost]
public IActionResult PostProduct([FromBody]Product product)
{
if (!ModelState.IsValid)
{
return BadRequest(ModelState);
}
_repo.Add(product);
return CreatedAtRoute("GetToode",product);
}
[FormBody]を使用する場合、productは常にnullです。使用しない場合、productは評価されますが、すべてのフィールドがnullになります。製品クラスは単純です。
public class Product
{
public int ProductID { get; set; }
public string EAN { get; set; }
public string Name { get; set; }
public string Description { get; set; }
public int? CategoryID { get; set; }
}
post で提案されているように、NullValueHandlingをConfigureServicesに追加しようとしましたが、使用できません。
services.AddMvc()
.AddJsonOptions(jsonOptions =>
{
jsonOptions.SerializerSettings.NullValueHandling = Newtonsoft.Json.NullValueHandling.Ignore;
});
同じ問題がありました。着信インスタンスのクラス用のパブリックパラメーターレスコンストラクターがないことが判明しました。この場合、Product
には保護されたコンストラクターのみがあり、パラメーターは何があっても常にnullでした。それが誰かを助けることを願っています。