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

Swagger为何不再将标记[Required]的int?属性显示为可空?

问题说明

我定义了如下可空整数属性:

public int? Test { get; set; }

对应的Swagger定义为:

test    integer($int32)
        nullable: true

但当我给该属性添加[Required]特性后:

[Required]
public int? Test { get; set; }

Swagger定义变成了:

test*   integer($int32)

为什么此时这个属性不再被标记为可空?

原因解析
  • [Required]特性与可空值类型的组合,会被Swashbuckle(生成Swagger文档的常用工具)解读为字段必须存在且不能为null。当你给int?加上[Required],相当于明确要求该属性必须有有效值,不能是null,因此Swagger不再显示nullable: true。
  • 从语义逻辑来看,[Required]强制请求中必须包含该字段,而可空值类型原本允许null,两者结合后就排除了null的可能性——既然字段必须存在,又被要求必填,Swagger会默认它不能为null,所以移除了可空标记。
  • 如果你需要“字段必填但允许为null”的语义,这种写法本身存在冲突。因为在ASP.NET Core的模型验证逻辑里,[Required]对可空值类型默认会判定null不符合要求,无法实现“必填且可空”的效果。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.02 04:52:08