在我的 ASP.NET Core 6 Web API 项目中,我有一个
FolderDto
类型,它具有可为 null 的 ParentFolder
属性:
public class FolderDto
{
public string Name { get; set; } = string.Empty;
public string Description { get; set; } = string.Empty;
public Folder? ParentFolder { get; set; }
}
我还有一个接收
FolderDto
: 的端点
[HttpPost]
public async Task<Folder> Post([FromBody] FolderDto folderDto)
{
var folder = mapper.Map<Folder>(folderDto);
folder.FolderOwner = folderDto.ParentFolder?.FolderOwner ?? await userService.FindByIdAsync(1);
folderService.CreateFolder(folder);
return folder;
}
在 Swagger 中测试此端点时,出现以下错误:
“错误”:{ "ParentFolder.FolderOwner": [ “FolderOwner 字段是必填字段。” ] }
在 Swagger 中测试端点时,我故意将
ParentFolder
设置为空对象:
{
"name": "string",
"description": "string",
"parentFolder": { }
}
当我将
ParentFolder
属性设置为可为空时,为什么 .NET 试图验证该属性?
您将
parentFolder
设置为可为空 - 这意味着您可以省略 parentFolder
的值并从 JSON 中完全忽略该元素 - 或使用 null
。
但是你没有使其引用的实际对象(
parentFolder
的类)全部可为空 - 这意味着,你不能在JSON中提供一个空对象 - 除非你创建了ALL属性parentFolder
类可为 null。
简而言之:空对象不与
null
相同或等效。它仍然是一个对象(其所有属性为空/默认/空) - 但它是一个对象 - 不是 null
,它不是对象/什么都没有/没有任何值