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

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

<分区>

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

每当客户端向 api 发出 PUT 请求时,我应该如何确定属性是否在请求中设置为 null - 或者根本没有在请求中设置?

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

如果它根本没有设置,我不想更改保存在数据库中的实际模型的状态,因为该属性。

当客户端使用 PUT 时出现问题,并且已经实现了客户端不知道的新字段。我不希望客户将"new"值覆盖为 null,因为他们一开始就无意设置。

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

感谢所有建议。

问候弗雷德里克

最佳答案

我认为您没有使用正确的 HTTP 方法,这是问题的根源。 HTTP PUT 意味着你想用请求正文中的内容覆盖请求 url 中的资源。因为 C# 没有 undefined,所以它无法区分 NULL 和未提供的属性。

如果您需要进行部分修改,那么您应该使用 PATCH相反

关于c# AspNetCore WebApi - 如何判断 PUT 上是否设置了 json 属性?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49796129/

相关文章:

RESTful API 设计 : should unchangable data in an update (PUT) be optional?

Backbone.js - model.save() 不触发 PUT 请求

swagger - 更改模型中的显示名称以在响应中显示

php - 如何在put请求中获取php中的文件名

c# - 如何实现接口(interface)返回带有空方法体的 IAsyncResult

c# - 为什么在 UI 中使用 DataTable 是错误的?

c# - 设计以避免派生类中的类型转换?

c# - 没有指定 authenticationScheme,也没有找到 DefaultChallengeScheme - ASP.NET core 2.1

angular - 我的 Angular 应用程序在调试时没有命中断点?

c# - Ploeh AutoFixture 无法从 System.Runtime.Serialization.ExtensionDataObject 创建实例