处理REST API中的只读属性

本文关键字:只读属性 API REST 处理 | 更新日期: 2023-09-27 18:26:20

NB。我不确定这个问题是否回答了我的问题,以防你把它标记为重复

我正在使用的REST API有一个创建新Person的方法。因此,我将Person类的序列化版本发送给它(在POST请求中):

public class Person
{
   public long Id;
   public string Name;
   public string Surname;
}

问题是Id是一个只读值,API返回一个错误,说"不允许为Id设置值",这是非常合理的。正如我们所知,当我们创建上述类的新实例时,Id将被设置为零。所以API会认为我在为Id指定一个值。

我如何修改我的类,以便将其同时用于

  1. 新建Person
  2. 获取所有Person的列表/通过Id获取特定的Person

处理REST API中的只读属性

您的实体类应该是这样的。

public class Person
{
   public int? Id {get;set;};//you can use long if you want
   public string Name {get;set;};
   public string Surname {get;set;};
}

然后,您需要一个存储库类来处理Add/Update/GetAll/Delete类型的操作。如果您熟悉存储库模式,请在此处使用它们。

public class PersonRepository
{
    public void Add(Person person)
    {
        //your add customer method
    }
    public List<Person> GetAll()
    {
        //your get all persons method
    }
    public Person GetPerson(int id)
    {
        //your get person method
    }
}

我认为API应该能够处理这个问题。使用0来表示新实体"还没有值"是非常合理的。

另一种选择是使用Nullable<int>作为Id,在这种情况下,NULL将表示"还没有值"。

(此外,您应该真正使用属性而不是字段。)

public class Person
{
   public int? Id { get; set; }
   public string Name { get; set; }
   public string Surname { get; set; }
}

然而,我认为这不是一个比仅仅使用0更好的选择。

如果API一直抱怨(也就是说,它也不会接受NULL值),那么您可以定义一个新类来添加一个新的人员。

public class NewPerson
{
   public string Name { get; set; }
   public string Surname { get; set; }
}