【发布时间】:2018-09-07 03:39:08
【问题描述】:
现在,我有一个具有三个必需属性的用户对象: {名, 姓, 创建时间 }。
现在我开发了一个 API 来创建用户。我想使用 POST /api/users。
我应该传入 Jason 数据,它包含我要发布的数据。
如果我传入 {FirstName=abc, LastName=abc, CreatedTime=sometime},它可以工作,但如果我错过任何属性,比如只传入 {firstname=abc},它会抛出异常。
我在下面粘贴了我的方法。
[Route("api/users")]
public User CreateUser(User user)
{
if (!ModelState.IsValid)
throw new HttpResponseException(HttpStatusCode.BadRequest);
user.FirstName = String.IsNullOrEmpty(user.FirstName) ? "Undefined" : user.FirstName;
user.LastName = String.IsNullOrEmpty(user.LastName) ? "Undefined" : user.LastName;
user.UserName = String.IsNullOrEmpty(user.UserName) ? "Undefined" : user.UserName;
user.ModifiedAt = DateTime.Now;
user.CreatedAt = DateTime.Now;
_context.Users.Add(user);
_context.SaveChanges();
return user;
}
我的问题是:有什么方法可以传入用户的部分属性?比如 {firstname=abc}。
这种技术也可以用作 PUT(更新用户方法)。
提前致谢。
【问题讨论】:
-
您的
User对象是否用于需要所有属性的任何其他 API? -
@Dishant 不,这是我在这个项目中唯一的 api。
-
比@Mohammad Nikravesh 提到的那种情况下的解决方案更适合你。
-
@Dishant 这行得通,谢谢。但是,如果我使用 JsonIgnore,它将忽略该属性的所有出现。如果我调用 /api/users/1,它也会隐藏该属性。有什么办法让它只忽略输入而不是输出?
-
@WilliamShu 我得到了你想要的,你可能需要覆盖 defaultcontractresolver,看看这个stackoverflow.com/a/20963058/4189817
标签: c# json restful-url