我有如下所述的将用户作为参数的方法。 要发送用户参数值,我正在使用邮递员请求/响应工具。 我的问题是,如果请求在主体请求中已经具有用户参数(请参阅邮递员打印屏幕),为什么我需要在动作控制器中直接指定[FromBody]?删除此属性后,参数发送的值为空。
谢谢
[HttpPost("register")]
public IActionResult Register([FromBody]User user)
{
//.. code here
}
public class User
{
public string Name { get; set; }
public string Password { get; set; }
}
答案 0 :(得分:1)
对于Model Binding
中的Asp.Net Core
,MVC
和Web APi
使用相同的模型绑定模式。
有默认的模型绑定,例如Form Values
,Route values
和Query Strings
。如果这些绑定失败,它将不会引发错误,并返回null。
如果您不想添加[FromBody]
,则可以尝试进行Form Values
绑定并从PostMan发送请求,如下所示:
[FromBody]
将覆盖默认数据源,并从请求正文中指定模型绑定程序的数据源。
您可以参考Model Binding in ASP.NET Core以获得详细信息
答案 1 :(得分:0)
[FromBody]
指令告诉Register操作在请求的主体中(而不是从URL的其他位置)查找User参数。因此,删除它会混淆您的方法,这就是为什么您看到空值的原因,因为它不确定在哪里寻找User
参数。
请参阅:https://docs.microsoft.com/en-us/aspnet/web-api/overview/formats-and-model-binding/parameter-binding-in-aspnet-web-api,以获取更多信息/学习。
答案 2 :(得分:-1)
[FromBody]属性可确保API读取邮递员正文中的JSON有效负载。有关更多信息,请阅读