Asp.net 核心 Post 参数始终为空
Asp.net Core Post parameter is always null
我正在从 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 方法总是为 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] 时,产品始终为空,当不使用它时,产品是有价值的,但所有字段都为空。产品class很简单。
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; }
}
我尝试按照 中的建议将 NullValueHandling 添加到 ConfigureServices,但没有用。
services.AddMvc()
.AddJsonOptions(jsonOptions =>
{
jsonOptions.SerializerSettings.NullValueHandling = Newtonsoft.Json.NullValueHandling.Ignore;
});
我只需要更正您 POST 请求中的双引号就可以了。试试这个:
{"Ean":"1122u88991","Name":"Post test","Description":"Post test desc"}
见下方截图。
有同样的问题。事实证明,我没有 public 传入实例的 class 无参数构造函数。在这种情况下,Product
只有受保护的构造函数,无论如何参数始终为 null。希望对大家有帮助。
我遇到了类似的问题,但我没有检查 ModelState
作为 OP 的有效性。发生这种情况时,在调试模式下检查它可能会指出模型有什么问题:
在此示例中,我使用无效字符串 'A'
作为 Guid
属性 的测试值,因此模型始终为空。
我正在从 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 方法总是为 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] 时,产品始终为空,当不使用它时,产品是有价值的,但所有字段都为空。产品class很简单。
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; }
}
我尝试按照
services.AddMvc()
.AddJsonOptions(jsonOptions =>
{
jsonOptions.SerializerSettings.NullValueHandling = Newtonsoft.Json.NullValueHandling.Ignore;
});
我只需要更正您 POST 请求中的双引号就可以了。试试这个:
{"Ean":"1122u88991","Name":"Post test","Description":"Post test desc"}
见下方截图。
有同样的问题。事实证明,我没有 public 传入实例的 class 无参数构造函数。在这种情况下,Product
只有受保护的构造函数,无论如何参数始终为 null。希望对大家有帮助。
我遇到了类似的问题,但我没有检查 ModelState
作为 OP 的有效性。发生这种情况时,在调试模式下检查它可能会指出模型有什么问题:
在此示例中,我使用无效字符串 'A'
作为 Guid
属性 的测试值,因此模型始终为空。