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类的AdditionalProperties是object类型,可以直接赋值布尔值:
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




