在我的AspNetCore WebApi中将json反序列化为类模型时,我很难找到处理默认值的最佳方法。
每当客户端向api发出PUT请求时,我应该如何判断请求中的属性是否设置为null - 或者请求中是否设置了该属性?
此时我将[FromBody]属性用于反序列化为类类型,以及ModelValidation用于需要字段等。但是一旦json请求被反序列化,我怎么能判断是否例如。 “字符串名称”属性显式设置为null,或者在json请求中没有设置,但是默认为null?
在没有设置的情况下,我不想更改为该属性保存在DB中的实际模型的状态。
当客户端使用PUT并且已经实现了一个客户端不知道的新字段时,会出现问题。我不希望客户端覆盖“新”值为null,他们无意首先设置。
是否有任何标准或最佳做法来处理此问题?我无法想象我是唯一有这个问题的人。实现我自己的json反序列化器,或者为了添加额外的字段而实现端点的版本控制,似乎有点过头了。同时协调所有客户端的部署(处理新属性) /值被处理),也不是一个选项。
所有建议都表示赞赏。
关心弗雷德里克
答案 0 :(得分:1)
我认为您没有使用正确的HTTP方法,这是您的问题的根源。 HTTP PUT意味着您要使用请求正文中的内容覆盖请求URL处的资源。由于C#没有undefined
,因此无法区分NULL
与未提供的属性。
如果您需要进行部分修改,则应使用PATCH代替