ASP.NET Core Web API 端点验证可为 null 的属性

问题描述 投票:0回答:1

在我的 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 试图验证该属性?

asp.net-core-webapi .net-6.0
1个回答
0
投票

您将

parentFolder
设置为可为空 - 这意味着您可以省略
parentFolder
的值并从 JSON 中完全忽略该元素 - 或使用
null

但是你没有使其引用的实际对象(

parentFolder
的类)全部可为空 - 这意味着,你不能在JSON中提供一个空对象 - 除非你创建了ALL属性
parentFolder
类可为 null。

简而言之:空对象

null
相同或等效。它仍然是一个对象(其所有属性为空/默认/空) - 但它是一个对象 - 不是
null
,它不是对象/什么都没有/没有任何值

© www.soinside.com 2019 - 2024. All rights reserved.