【问题标题】:Put all the properties or only the properties that I'm going to update?放置所有属性还是仅放置我要更新的属性?
【发布时间】:2014-09-03 09:29:24
【问题描述】:

我正在使用最新的 sdk、.NET Framework 4.5.1 和 C# 开发一个 ASP.NET Web Api。

我在 ApiController 上有这个 put 方法:

public void Put(HttpRequestMessage request, int userId, User user)
{
}

如果User 有很多属性,例如姓名、生日、地址、国家等。而我只想更新他/她的地址。

我必须从客户端向 Web Api 发送什么?一个只有他的名字的用户实例?

这是一个 JSON 示例:{"UserAddress":"Ugly street, 1"}

但是,也许,我不能这样做,因为某些Users 属性不能为空,(比如他/她的年龄,因为它是int Age { get; set; }

我可以将要更新的所有属性发送到Url,而不是放置User 实例,但我认为这可能会一团糟。

【问题讨论】:

  • 为此,您可以做两件事。首先 - 使您的所有属性都可以为空。或者第二个选项是 - 在您的模型的构造函数中,根据它们的数据类型为所有属性分配默认值。然后你可以像这样传递 json - {"UserAddress":"Ugly street, 1"}
  • @KrishnrajRana 感谢您的评论。我想使所有属性都可以为空,但我问了这个问题,看看是否有更好的方法。
  • 在我们的一个项目中,我们为 iPhone 团队使用的 wcf 服务使用了第二种方法。

标签: c# asp.net asp.net-mvc web-services rest


【解决方案1】:

PUT 的语义表示您必须指定资源的完整当前状态。如果您不想这样做,您应该使用 POST 或 PATCH 来更新您的资源。

【讨论】:

    【解决方案2】:

    我会这样做:

    public class AddressController : ApiController
    {
        [Route("users/userId/address")]
        public void Put(int userId, Address address)
        {
    
        }
    }
    

    【讨论】:

    • 感谢您的回答,但是如果 User 类有 20 个属性,我需要为每个属性都这样做吗?
    【解决方案3】:

    我认为最好的方法是从 Web Api 获取 User,更新其属性,然后将其放入 Web Api。

    步骤:

    1. 从 Web Api 获取 User
    2. 使用新属性值更新 User
    3. User 放入 Web Api。

    这是更通用的解决方案。在这里,我们可以更改一个或多个属性,我们不需要为每个属性添加方法,也不需要具有可为空的属性。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-02-06
      • 1970-01-01
      • 2023-03-22
      相关资源
      最近更新 更多