c#AspNetCore WebApi - 如何判断PUT上是否设置了json属性?

时间:2018-04-12 12:07:58

标签: c# put asp.net-core-webapi

在我的AspNetCore WebApi中将json反序列化为类模型时,我很难找到处理默认值的最佳方法。

每当客户端向api发出PUT请求时,我应该如何判断请求中的属性是否设置为null - 或者请求中是否设置了该属性?

此时我将[FromBody]属性用于反序列化为类类型,以及ModelValidation用于需要字段等。但是一旦json请求被反序列化,我怎么能判断是否例如。 “字符串名称”属性显式设置为null,或者在json请求中没有设置,但是默认为null?

在没有设置的情况下,我不想更改为该属性保存在DB中的实际模型的状态。

当客户端使用PUT并且已经实现了一个客户端不知道的新字段时,会出现问题。我不希望客户端覆盖“新”值为null,他们无意首先设置。

是否有任何标准或最佳做法来处理此问题?我无法想象我是唯一有这个问题的人。实现我自己的json反序列化器,或者为了添加额外的字段而实现端点的版本控制,似乎有点过头了。同时协调所有客户端的部署(处理新属性) /值被处理),也不是一个选项。

所有建议都表示赞赏。

关心弗雷德里克

1 个答案:

答案 0 :(得分:1)

我认为您没有使用正确的HTTP方法,这是您的问题的根源。 HTTP PUT意味着您要使用请求正文中的内容覆盖请求URL处的资源。由于C#没有undefined,因此无法区分NULL与未提供的属性。

如果您需要进行部分修改,则应使用PATCH代替