如何绑定json对象以正确建模?

时间:2018-10-14 22:58:14

标签: c# asp.net-mvc model-binding

我一直在尝试将数据发送到API,以使该API在数据库中保留操作。我无法做到,也找不到解决方案。请帮忙。

模型Dto:

public class NewRentalDto
{
    public int CustomerId { get; set; }
    public List<int> MovieIds { get; set; }
}

控制器定义:

public IHttpActionResult NewRentals(NewRentalDto newRental){
   //todo
}

通过邮递员发送的Json对象:

尝试1:

{
 "movieIds": [3,4]
 ,"customerId": 1004
}

结果:异常

尝试2:

{
 "MovieIds": [3,4]
 ,"CustomerId": 1004
}

结果:异常

尝试3:

{
 "Movieids": [3,4]
 ,"Customerid": 1004
}

结果:异常

尝试5:

{    
 "customerId": 1004
,"movieIds": [3,4]
}

结果:异常

当我尝试访问newRental实例时,在控制器的“ todo”部分中得到了异常。 这是我收到的消息:

{
       "message": "An error has occurred.",
       "exceptionMessage": "Object reference not set to an instance of an object."
       //more error info
}

2 个答案:

答案 0 :(得分:0)

您是否已定义发送对象时要使用的动词?例如API需要[HttpPost]或[HttpGet] ..

当我定义API端点时,通常会明确设置动词以及动词来自何处。

例如

[HttpPost]
public IHttpActionResult NewRentals([FromBody]NewRentalDto newRental)

这将与您在Postman中选择的选项保持一致。如果动词不正确(例如,控制器要求输入“ GET”,而您正在“ POST”输入数据),则该对象的实例为null。

也。您可能希望将Newtonsoft作为参考包含在对象中,并标记属性,如下所示:

using Newtonsoft.Json;

[JsonObject]
public class NewRentalDto
{
    [JsonProperty]
    public int CustomerId { get; set; }

    [JsonProperty]
    public List<int> MovieIds { get; set; }
}

答案 1 :(得分:0)

您是否缺少通过示例的标题“ Content-Type”,效果很好

// POST: api/Default
public void Post([FromBody]NewRentalDto newRentalDto)
{

}

模型

public class NewRentalDto
{
    public int CustomerId { get; set; }
    public List<int> MovieIds { get; set; }
}

发布请求

enter image description here

调试视图

enter image description here