Ich schicke POST vom Fiddler:
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"}
Die Post-Methode wird jedoch immer null.
// POST api/Product
[HttpPost]
public IActionResult PostProduct([FromBody]Product product)
{
if (!ModelState.IsValid)
{
return BadRequest(ModelState);
}
_repo.Add(product);
return CreatedAtRoute("GetToode",product);
}
Wenn ich [FormBody] verwende, ist das Produkt immer null, wenn es nicht verwendet wird, wird das Produkt bewertet, aber alle Felder sind null. Produktklasse ist einfach.
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; }
}
ich habe versucht, NullValueHandling zu ConfigureServices hinzuzufügen, wie in post vorgeschlagen, aber keine Verwendung.
services.AddMvc()
.AddJsonOptions(jsonOptions =>
{
jsonOptions.SerializerSettings.NullValueHandling = Newtonsoft.Json.NullValueHandling.Ignore;
});
Hatte das gleiche Problem. Es stellte sich heraus, dass ich keinen öffentlichen parameterlosen Konstruktor für die Klasse der eingehenden Instanz hatte. In diesem Fall hatte Product
nur geschützte Konstruktoren und der Parameter war immer gleich null. Hoffe es hilft jemandem.
Ich habe ein ähnliches Problem, aber ich hatte keine Überprüfung auf die Gültigkeit des ModelState
als OP. In diesem Fall können Sie durch Überprüfen im Debug-Modus feststellen, was mit dem Modell nicht stimmt:
In diesem Beispiel habe ich eine ungültige Zeichenfolge 'A'
Als Testwert für eine Guid
-Eigenschaft verwendet, sodass das Modell immer null war.