ASP.NET WebAPI如何使用所有数据创建用户的POST请求

时间:2013-06-25 13:27:59

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

我正在使用ASP.NET WebAPI,到目前为止我已经完成了一些CRUD操作。但是我的Create操作不能完全正常工作。

使用以下POST请求(JSON),我可以创建用户。

{Username:"Bob", FirstName:"Foo", LastName:"Bar", Password:"123", Headline:"Tuna"}

然而,对象User实际上有更多属性 - 地址集合。

public class User
{
    public int UserId { get; set; }
    public string Username { get; set; }
    public string FirstName { get; set; }
    public string LastName { get; set; }
    public string Password { get; set; }
    public string Headline { get; set; }
    public virtual ICollection<Address> Addresses { get; set; }
}
public class Address
{
    public string Id { get; set; }
    public string StreetName { get; set; }
    public string Country { get; set; }
    public string ZipCode { get; set; }
    public int Cycle { get; set; }
    public int UserId { get; set; }
    public User User { get; set; }
}
... ...

我不确定如何使用一个或多个地址创建用户,因为我不知道下一个地址ID必须是什么以及它需要具有相应的UserId。

UPDATE2

请参阅我的解决方案。

两次

3 个答案:

答案 0 :(得分:1)

[ { ... }, { ... } ]

您刚刚创建了一个包含两个对象的数组 将它转换为单个Address实例是没有意义的。

相反,您需要创建具有多个属性的单个对象:

{ StreetName:"Madison Square Garden", Country:"OP" }

答案 1 :(得分:1)

这是一种简单的方法。您可以创建整个对象图,这是User对象,其中设置了所有属性,只需通过Get操作方法返回它,然后让Web API将图形序列化为JSON。您可以使用Fiddler中的JSON或任何POST。

public User Get(int id)
{
   return new User()
   {
      UserId = id, UserName = "Arnold", ...,
      Addresses = new List<Address>()
      {
         new Address() { ... }
      },
      PhoneNumbers = ...
   };
}

答案 2 :(得分:0)

制作Id列标识,以便数据库负责增量。因此,我可以发布以下JSON http post请求。

{ "Addresses": [ { "StreetName": "Bigfoot Street", "Country": "AB", "ZipCode": "1234", "Cycle": 1, }, { "StreetName": "Woo Way Avenue", "Country": "AC", "ZipCode": "7777", "Cycle": 2, } ], "Phonenumbers": [ { "Number": "99999999", "Cycle": 3, } ], "Emails": [ { "Uemail": "bigfoot@example.com", "Cycle": 4, } ], "Positions": [], "Username": "Bigfoot", "FirstName": "Foo", "LastName": "Bar", "Password": "123", "Headline": "Pro" }

实体框架负责将id分配给所有内容。