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

如何在Swagger响应示例Schema中设置非空属性

Swagger响应Schema设置属性非空的替代方案

不用在视图模型上标记[Required](避免混淆业务验证和Swagger文档定义),可以试试以下几种方案:

1. 自定义Swashbuckle Schema过滤器

通过实现ISchemaFilter,手动指定模型属性的非空规则,完全分离业务验证和文档定义:

public class RequiredPropertiesSchemaFilter : ISchemaFilter
{
    public void Apply(OpenApiSchema schema, SchemaFilterContext context)
    {
        // 针对目标视图模型处理
        if (context.Type != typeof(YourViewModel)) return;

        // 设置指定属性为非空
        if (schema.Properties.TryGetValue("TargetProperty", out var propSchema))
        {
            propSchema.Nullable = false;
            // 同时添加到required列表,符合OpenAPI规范
            schema.Required.Add("TargetProperty");
        }
    }
}

然后在Swagger注册时添加这个过滤器:

services.AddSwaggerGen(c =>
{
    c.SchemaFilter<RequiredPropertiesSchemaFilter>();
});

2. 使用[DataMember(IsRequired = true)]标记

如果你的视图模型使用[DataContract]特性,可以通过[DataMember(IsRequired = true)]来标记Swagger需要显示为非空的属性,Swashbuckle会自动识别这个配置:

[DataContract]
public class YourViewModel
{
    [DataMember(IsRequired = true)]
    public string NonNullableProperty { get; set; }

    public string NullableProperty { get; set; }
}

3. 手动映射模型Schema

如果只是个别模型需要调整,直接在Swagger配置里手动定义Schema:

services.AddSwaggerGen(c =>
{
    c.MapType<YourViewModel>(() => new OpenApiSchema
    {
        Type = "object",
        Properties = new Dictionary<string, OpenApiSchema>
        {
            ["NonNullableProperty"] = new OpenApiSchema { Type = "string", Nullable = false },
            ["NullableProperty"] = new OpenApiSchema { Type = "string", Nullable = true }
        },
        Required = new HashSet<string> { "NonNullableProperty" }
    });
});

关于[JsonProperty(Required = Required.DisallowNull)]无效的说明

Swashbuckle默认不会将Newtonsoft.Json的JsonProperty(Required)设置直接映射到OpenAPI的Schema规则,因为这个标记更多是用于序列化时的验证,而非文档定义。上面的方案更贴合Swagger文档的需求。

内容的提问来源于stack exchange,提问作者Valdeci Rodrigues Junior

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.14 06:55:25