9

I'm sending POST from 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"}

But Post method always gets null.

// POST api/Product
[HttpPost]
public IActionResult PostProduct([FromBody]Product product)
{
    if (!ModelState.IsValid)
    {
        return BadRequest(ModelState);
    }

    _repo.Add(product);

    return CreatedAtRoute("GetToode",product);
}

When I use [FormBody] product is always null, when not using it product is valued but with all fields being null. Product class is simple.

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; }
}

i tried adding NullValueHandling to ConfigureServices as proposed in post but no use.

services.AddMvc()
    .AddJsonOptions(jsonOptions =>
    {
        jsonOptions.SerializerSettings.NullValueHandling = Newtonsoft.Json.NullValueHandling.Ignore;
    });
4

3 回答 3

7

I just had to correct the double quotes in your POST request and it worked. Try this:

{"Ean":"1122u88991","Name":"Post test","Description":"Post test desc"}

See screenshot below.

Screenshot

于 2016-09-28T13:51:32.957 回答
6

I experience a similar problem but I had no check for the validity of the ModelState as the OP. When this happens, inspecting it in debug mode will likely point you to what's wrong with the model:

QuickWatch window

In this example I was using an invalid string 'A' as test value for a Guid property, so the model was always null.

于 2019-03-19T20:56:31.133 回答
1

Had the same problem. It turned out that I had no public parameterless constructor for class of incoming instance. In this case, Product had only protected constructors and parameter was always null no matter what. Hope it helps somebody.

于 2018-07-18T09:25:02.473 回答