【问题标题】:nested model not binding when sending data using postman [duplicate]使用邮递员发送数据时嵌套模型未绑定[重复]
【发布时间】:2015-12-20 07:08:18
【问题描述】:

当我尝试使用 WebAPI2 放置数据时出现对象引用错误。我的班级结构是这样的

public class Student
{
    public int Id { get; set; }
    public string Name { get; set; }
    public string Email { get; set; }
    public Address address { get; set; }
}

public class Address
{
    public int Id { get; set; }
    public int StudentId { get; set; }
    public string City { get; set; }
    public string AddressLine { get; set; }
}

我的 Put 方法如下所示

public async Task putStudentProfile(Student student)
{
    tblStudent std= db.tblStudent .FirstOrDefault(p => p.ID == student.Id);
    std.NAME = student.Name;
    std.EMAIL= student.Email;
    tblAddress addr= db.tblAddress.FirstOrDefault(q => q.ID == student.Id);
    addr.City= student.address.City;
    await db.SaveChangesAsync();
}

使用邮递员发送 JSON 数据。我的JSON数据是这样的

{
"Id":59,
"Name": "Sandeep",
"Email": "xxxxxxxx@xxxx.com",
"address":{
    "Id":42,
    "StudentId": "59",
    "City": "xxxxxx",
    "AddressLine":"xxxxxxxxxxxxx"
    }
}

当我尝试访问 student.address.City 时遇到对象引用错误

有办法解决这个问题吗?

【问题讨论】:

  • 因为studentaddress属性是null
  • @StephenMuecke 感谢您的评论,我正在从邮递员那里发送数据。如何初始化学生的地址属性?有什么建议吗?
  • 如果您正确发送数据,则DefaultModelBinder 将初始化并绑定address 属性。您需要编辑您的问题,显示您如何将数据发送到控制器(然后我将重新打开问题)
  • 改成"address.Id": 42"address.StudentId": "59"等(去掉"address":{ ... }
  • @StephenMuecke 感谢您的支持。

标签: c# asp.net asp.net-mvc wcf asp.net-web-api2


【解决方案1】:

javascript 对象的格式不正确,需要使用点表示法(与访问控制器中属性值的方式相同)

{
    "Id":59,
    "Name": "Sandeep",
    "Email": "xxxxxxxx@xxxx.com",
    "address.Id": 42,
    "address.StudentId": 59,
    "address.City": "xxxxxx",
    "address.AddressLine": "xxxxxxxxxxxxx"
}

【讨论】:

  • 由于它不是真正有效的对象 JSON 表示,您介意添加解释此行为的链接吗?
  • @AlexeiLevenkov,因为邮递员的默认值是x-www-form-urlencoded,所以DefaultModelBinder 需要这种格式。否则它需要被字符串化(例如JSON.stringify()contentType 设置为'json' - 但我对邮递员不够熟悉,不知道是否可以这样做(稍后会做一些额外的研究)
猜你喜欢
  • 2018-11-15
  • 1970-01-01
  • 2014-12-29
  • 2019-05-13
  • 1970-01-01
  • 2020-10-30
  • 2018-05-25
  • 2021-07-13
  • 2021-09-01
相关资源
最近更新 更多