如何将C# Swagger生成中的OneOf替换为AnyOf?
将Swagger生成的OneOf替换为AnyOf的方法
Swashbuckle.AspNetCore(你使用的SwaggerGen库)没有提供直接将OneOf替换为AnyOf的内置方法,但可以通过自定义SchemaFilter实现该需求:
步骤1:创建自定义SchemaFilter
编写实现ISchemaFilter接口的过滤器类,将Schema的OneOf属性值转移到AnyOf并清空原OneOf:
using Microsoft.OpenApi.Models; using Swashbuckle.AspNetCore.SwaggerGen; public class ReplaceOneOfWithAnyOfFilter : ISchemaFilter { public void Apply(OpenApiSchema schema, SchemaFilterContext context) { if (schema.OneOf != null && schema.OneOf.Any()) { schema.AnyOf = schema.OneOf; schema.OneOf = new List<OpenApiSchema>(); } } }
步骤2:在Swagger配置中注册过滤器
修改原有AddSwaggerGen配置,添加自定义过滤器的注册:
services.AddSwaggerGen(options => { options.UseOneOfForPolymorphism(); options.SelectDiscriminatorNameUsing(_ => "messageType"); options.SwaggerDoc("v1", new OpenApiInfo { Version = "v1", Title = "MyTitle", Description = "MyDescription", Contact = new OpenApiContact { Name = "MyName", Email = "mymail@gmail.com" } }); options.UseAllOfToExtendReferenceSchemas(); // 注册自定义过滤器,替换OneOf为AnyOf options.SchemaFilter<ReplaceOneOfWithAnyOfFilter>(); });
配置完成后,Swagger生成的文档中,原本由UseOneOfForPolymorphism生成的oneOf字段会被替换为anyOf。
内容的提问来源于stack exchange,提问作者AGDev
相关产品推荐
相关产品推荐

