c# - 使用 .NET 6 在 ASP.NET Core 中处理 API 调用中的空子类
问题描述
我刚刚使用 .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
通话中发送空对象吗?
解决方案
似乎属性绑定不喜欢“空”对象。我的猜测是它会尝试将属性设置为 null。然而,.net 6 比旧框架有更严格的政策,当涉及到将事物设置为 null 时。
当您专门将属性类型设置为可为空时,.net 6 知道您是故意这样做的。简而言之,您应该这样做:
public File? Attachment { get; set; }
所以 asp.net core 知道这null
没关系。
推荐阅读
- java - ant fixcrlf 包含/排除不起作用
- wordpress - Wordpress - 如何根据内容动态设置标题?
- javascript - 我怎么知道 Vue.js 环境是开发环境还是生产环境?
- laravel - 使用 Stripe 和 Laravel Cashier 一次性收费并重复收费
- vba - 将范围导出到新 Excel 文档 VBA
- gitlab - gitlab中项目和子组之间的区别
- java - 无法解析方法“getData()”
- sql - 我有 2 列 V_DATE 和 OTP.... V_DATE 24 小时后我想设置 OTP 列 =0
- javascript - Stenciljs @Method 不工作
- java - 必须如何处理 ServerSOAPFaultException?它与处理 SOAPFaultException 有何不同?