处理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
指定一个值。
我如何修改我的类,以便将其同时用于
- 新建
Person
- 获取所有
Person
的列表/通过Id
获取特定的Person
您的实体类应该是这样的。
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; }
}