You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多
文档控制台
免费开始使用

Swashbuckle 5.6.0中如何设置additionalProperties为false?

解决Swashbuckle 5.6.0设置additionalProperties: false的问题

我来帮你搞定这个困扰!你遇到的情况在Swashbuckle 5.x版本里很常见——默认情况下它不会自动输出additionalProperties字段,哪怕用ISchemaFilter,如果没找对正确的赋值方式也会无效。下面是具体的实现步骤:

1. 自定义ISchemaFilter实现类

创建一个SchemaFilter,直接将目标Schema的AdditionalProperties属性设置为false。注意在Swashbuckle 5.6.0中,Schema类的AdditionalPropertiesobject类型,可以直接赋值布尔值:

using Swashbuckle.Swagger;
using System;

public class DisableAdditionalPropertiesFilter : ISchemaFilter
{
    public void Apply(Schema schema, SchemaRegistry schemaRegistry, Type type)
    {
        // 全局禁用所有类型的additionalProperties
        if (schema.Properties != null)
        {
            schema.AdditionalProperties = false;
        }

        // 如果你只想针对特定类型禁用,替换成下面的逻辑:
        // if (type == typeof(YourTargetClass) && schema.Properties != null)
        // {
        //     schema.AdditionalProperties = false;
        // }
    }
}

2. 在Swagger配置中注册这个Filter

找到你的SwaggerConfig.cs文件,在启用Swagger的配置块中注册刚才的Filter:

using System.Web.Http;
using WebActivatorEx;
using YourProjectNamespace;
using Swashbuckle.Application;

[assembly: PreApplicationStartMethod(typeof(SwaggerConfig), "Register")]

namespace YourProjectNamespace
{
    public class SwaggerConfig
    {
        public static void Register()
        {
            var thisAssembly = typeof(SwaggerConfig).Assembly;

            GlobalConfiguration.Configuration
                .EnableSwagger(c =>
                    {
                        c.SingleApiVersion("v1", "Your API Display Name");
                        
                        // 注册自定义的SchemaFilter
                        c.SchemaFilter<DisableAdditionalPropertiesFilter>();
                        
                        // 其他Swagger配置项...
                    })
                .EnableSwaggerUi(c =>
                    {
                        // Swagger UI相关配置...
                    });
        }
    }
}

3. 验证效果

重启你的项目,访问http://SITE/swagger/docs/v1,查看对应的Schema定义,你会发现目标类型的Schema里已经出现了"additionalProperties": false字段。

为什么之前的尝试没生效?

你之前说用ISchemaFilter只能添加Schema类型,应该是误将AdditionalProperties赋值为Schema对象了。在Swashbuckle 5.x版本中,这个属性支持直接赋值布尔值,以此来快速启用/禁用额外属性的支持。

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

火山引擎 最新活动