FromBody属性

时间:2018-08-01 19:57:53

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

我有如下所述的将用户作为参数的方法。 要发送用户参数值,我正在使用邮递员请求/响应工具。 我的问题是,如果请求在主体请求中已经具有用户参数(请参阅邮递员打印屏幕),为什么我需要在动作控制器中直接指定[FromBody]?删除此属性后,参数发送的值为空。

谢谢

postman request for register action

[HttpPost("register")]
 public IActionResult Register([FromBody]User user)
 {
  //.. code  here 

 }


public class User
{
    public string Name { get; set; }
    public string  Password { get; set; }
}

3 个答案:

答案 0 :(得分:1)

对于Model Binding中的Asp.Net CoreMVCWeb APi使用相同的模型绑定模式。

有默认的模型绑定,例如Form ValuesRoute valuesQuery Strings。如果这些绑定失败,它将不会引发错误,并返回null。

如果您不想添加[FromBody],则可以尝试进行Form Values绑定并从PostMan发送请求,如下所示:

enter image description here

[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有效负载。有关更多信息,请阅读

https://docs.microsoft.com/en-us/aspnet/web-api/overview/formats-and-model-binding/parameter-binding-in-aspnet-web-api