【问题标题】:ASP.NET Web API - pass a complex type from javascript jsonASP.NET Web API - 从 javascript json 传递复杂类型
【发布时间】:2015-04-23 10:06:04
【问题描述】:

我有一个 ASP.NET Web API,它接受一个带有 UserModel 的 POST:

[HttpPost]
public object Post(UserModel userModel)
{
    // some logic here
}

UserModel 是一个复杂类型,如下所示:

public class UserModel
{
    public int Id { get; set; }
    public string FirstName { get; set; }
    public string LastName { get; set; }
    public AddressModel CurrentAddress { get; set; }
}

AddressModel 模型如下所示:

public class AddressModel
{
    public string Country { get; set; }
    public string City { get; set; }
    public string Street { get; set; }
    public string Number { get; set; }
}

我正在尝试从 javascript 调用此 API 并发送 JSON 对象。这是我要发送的 JSON 对象:

var user = {
    Id: 1,
    FirstName: 'Hello',
    LastName: 'World',
    CurrentAddress: {
        Country: 'Israel',
        City: 'Tel Aviv',
        Street: 'Shalom',
        Number: '5'
    }
};

我在 Post 方法中得到的是 UserModel,其中 UserModel 字段填充了正确的信息,CurrentAddrent 地址已初始化,但发送的值不存在。父对象的值(UserModel 对象没问题)。

我在这里做错了什么?如何将复杂对象发送到 WebAPI 模型?

【问题讨论】:

  • 应该不是[FromBody] UserModel userModel?
  • 我肯定会使用 Fiddler 之类的工具仔细检查发送的 JSON
  • 可能不相关,但您的类型并不真正匹配:FirstNameLastNameints,应该是 strings
  • 在上面运行您的示例,纠正了 FirstNameLastName 的类型,并从 Post 方法返回 void 而不是 object,在我的机器上按预期工作。跨度>
  • @Christian 你是对的 - 我在这里编写了代码作为示例,并在不注意的情况下复制和粘贴。我会修改帖子。谢谢。

标签: javascript c# json asp.net-web-api asp.net-ajax


【解决方案1】:

要在 MVC Web API 操作中接收复杂的数据对象,您必须将 [FromBody] 属性添加到您的 POST 参数中。

[FromBody] 告诉 Web API 在 POST 请求的正文中搜索参数的值。

 [HttpPost]
 public void Post([FromBody] UserModel userModel)
 {

 }

我进行了本地测试并获得了值。

希望对你有帮助!

【讨论】:

    猜你喜欢
    • 2013-10-18
    • 2022-11-08
    • 2016-06-12
    • 2014-10-28
    • 1970-01-01
    • 1970-01-01
    • 2010-09-21
    • 2015-07-10
    相关资源
    最近更新 更多