【问题标题】:ASP.NET WebAPI how to make a POST request creating user with all dataASP.NET WebAPI 如何使用所有数据创建 POST 请求
【发布时间】:2013-06-28 00:46:49
【问题描述】:

我正在玩弄 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

查看我的答案以获得解决方案。

两次

【问题讨论】:

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


    【解决方案1】:
    [ { ... }, { ... } ]
    

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

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

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

    【讨论】:

      【解决方案2】:

      这是一个简单的方法。您创建整个对象图,即具有所有属性集的 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 = ...
         };
      }
      

      【讨论】:

      • 请检查我的第一篇文章我粘贴了 JSON 和我的问题。干杯
      • 我不太确定我是否完全理解你的问题,但我想你的问题的答案取决于你如何映射 EF 实体,如果基础表使用标识列,你是如何持久化的图表和所有这些。如果您不希望绑定用户 ID,可以将它们排除在 JSON 之外。顺便说一句,将请求直接绑定到您的实体类不是一个好习惯。
      • “将请求直接绑定到实体类不是一个好习惯”是什么意思。它还能如何工作? ://
      • 您可以使用 DTO 并使用 AutoMapper 之类的库将其映射到您的实体类。
      • 您能否指导我阅读一些文章或向我暗示一个方向,以便我可以阅读更多有关此特定问题的信息。为什么这不是一个好习惯等。既然你提到了我想知道更多。干杯!
      【解决方案3】:

      制作了 Id 列 Identity,以便数据库负责递增。因此我可以发布以下 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" }
      

      而 Entity Framework 负责为所有内容分配 id。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2023-04-05
        • 2023-03-09
        • 1970-01-01
        • 2019-01-09
        • 1970-01-01
        • 2022-11-17
        • 2016-01-24
        • 1970-01-01
        相关资源
        最近更新 更多