You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

ASP.NET Core 6 Web API可为空属性验证异常问题咨询

问题

在ASP.NET Core 6 Web API项目中,我定义了包含可为空ParentFolder属性的FolderDto类型,对应的POST接口接收该Dto对象。当在Swagger中测试时,我传入ParentFolder为空对象的请求,却收到“ParentFolder.FolderOwner字段为必填项”的验证错误。明明已将ParentFolder设为可为空,为何.NET仍会验证其属性?

相关代码

FolderDto定义

public class FolderDto
{
    public string Name { get; set; } = string.Empty;
    public string Description { get; set; } = string.Empty;

    public Folder? ParentFolder { get; set; }
}

POST接口代码

[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;
}

测试请求体

{
  "name": "string",
  "description": "string",
  "parentFolder": { }
}

错误信息

"errors": {
"ParentFolder.FolderOwner": [
"The FolderOwner field is required."
]
}
解答

问题核心是你传入的不是null的ParentFolder,而是一个空对象{}。

当请求体里传{}时,ASP.NET Core会尝试实例化一个Folder对象,但Folder类中的FolderOwner是必填项(要么标记了[Required]特性,要么在.NET 6+的nullable上下文里是非可空引用类型),所以模型验证会触发,提示该字段必填。

如果你的需求是“不需要指定父文件夹”,正确的做法是把parentFolder设为null,或者直接从请求体里删掉这个字段:

{
  "name": "string",
  "description": "string",
  "parentFolder": null
}

要是你确实需要允许传入空的ParentFolder对象(而非null),可以修改Folder类的定义,把FolderOwner设为可空类型,或者移除它的必填验证:

public class Folder
{
    // 将FolderOwner设为可空引用类型
    public string? FolderOwner { get; set; }
    // 其他属性...
}

内容的提问来源于stack exchange,提问作者Pablo52

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.25 09:46:00