Asp.net Core Post参数始终为null

时间:2016-09-28 12:53:15

标签: c# .net asp.net-core asp.net-core-webapi

我正在从fiddler发送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方法总是为空。

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

    _repo.Add(product);

    return CreatedAtRoute("GetToode",product);
}

当我使用[FormBody]时,产品始终为null,当不使用时,产品会被重视,但所有字段都为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;
    });

3 个答案:

答案 0 :(得分:5)

我只需更正POST请求中的双引号即可。试试这个:

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

见下面的截图。

Screenshot

答案 1 :(得分:0)

有同样的问题。事实证明,我没有传入实例类的公共无参数构造函数。在这种情况下,Product仅具有受保护的构造函数,并且无论如何,参数始终为null。希望对别人有帮助。

答案 2 :(得分:0)

我遇到类似的问题,但是我没有检查ModelState作为OP的有效性。发生这种情况时,在调试模式下检查它可能会指出该模型出了什么问题:

QuickWatch window

在此示例中,我使用无效的字符串'A'作为Guid属性的测试值,因此模型始终为空。