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

如何将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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.20 20:25:56