使用 .NET 6 在 ASP.NET Core 中处理 API 调用中的空子类
Posted
技术标签:
【中文标题】使用 .NET 6 在 ASP.NET Core 中处理 API 调用中的空子类【英文标题】:Handling empty subclasses in API calls in ASP.NET Core with .NET 6 【发布时间】:2021-12-25 17:36:59 【问题描述】:我刚刚使用 .NET 6 将我的后端 API 升级到 ASP.NET Core,如果 POST
调用包含一个空的子类,则开始出现错误。
这是一个例子。我的 API 收到 POST
对评论条目的调用,处理这些调用的类如下所示:
public class CommentEntry
[Required]
public string Comments get; set;
public DateTime EntryDate get; set;
public File Attachment get; set;
如您所见,该类有一个File
子类用于附件。 File
类如下所示:
public class File
public Guid Id get; set;
public string Name get; set;
public string Url get; set;
当我的 API 使用 .NET 5 运行 ASP.NET Core 时,我可以发送一个 POST
请求,如下所示,它为 attachment
属性发送一个空对象,它可以正常工作:
"comments": "Hello World!",
"entryDate: "2021-11-13T14:52",
"attachment":
现在,由于!ModelState.IsValid
行,我的控制器操作方法正在拒绝此操作。
如果我将 POST
请求更改为以下内容,那么它也可以在 .NET 6 中使用。
"comments": "Hello World!",
"entryDate: "2021-11-13T14:52",
"attachment:
"id": "00000000-0000-0000-0000-000000000000",
"name": "",
"url": ""
正如您在CommentEntry
类中所见,附件不是必需的。
在我没有子类数据的情况下,处理这种情况的正确方法是什么?我不应该在我的POST
调用中发送一个空对象吗?
【问题讨论】:
【参考方案1】:似乎属性绑定不喜欢“空”对象。我的猜测是它会尝试将属性设置为 null。但是,在将内容设置为 null 时,.net 6 的策略比旧框架更严格。
当您专门将属性类型设置为可为空时,.net 6 知道您是故意这样做的。简而言之,您应该这样做:
public File? Attachment get; set;
所以asp.net核心知道null
没问题。
【讨论】:
这个***.com/a/10439479/2210329怎么样以上是关于使用 .NET 6 在 ASP.NET Core 中处理 API 调用中的空子类的主要内容,如果未能解决你的问题,请参考以下文章
ASP.NET 6.0 Core 迁移 ASP.NET Core 7.0
在 ASP.NET Core 中使用 Entity Framework 6
使用 .NET 6 在 ASP.NET Core 中处理 API 调用中的空子类
.NET 6 Preview 5 中的 ASP.NET Core 更新