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

如何在ASP.NET Core Swagger中展示DTO字符串属性对应枚举值(不改类型)

在ASP.NET Core Web API中为字符串属性关联枚举并在Swagger UI显示可选值

实现方案

可以通过自定义SchemaFilter结合标记属性的方式,在不修改DTO属性类型的前提下,让Swagger UI显示对应枚举的可选值。具体步骤如下:

1. 创建自定义标记属性

定义一个Attribute,用来标记哪些字符串属性需要关联指定枚举:

[AttributeUsage(AttributeTargets.Property)]
public class EnumStringAttribute : Attribute
{
    public Type EnumType { get; }

    public EnumStringAttribute(Type enumType)
    {
        EnumType = enumType;
    }
}

2. 标记DTO中的目标属性

在需要关联枚举的字符串属性上添加上述Attribute:

public class FooDTO
{
    public int Id { get; set; }
    
    [EnumString(typeof(FooColor))]
    public string Color { get; set; } // 有效值对应FooColor枚举
}

public enum FooColor
{
    Purple,
    Blue,
    Pink
}

3. 实现自定义SchemaFilter

编写SchemaFilter,处理标记了EnumStringAttribute的属性,将枚举值注入到Swagger Schema中:

public class EnumStringSchemaFilter : ISchemaFilter
{
    public void Apply(OpenApiSchema schema, SchemaFilterContext context)
    {
        if (context.MemberInfo is PropertyInfo propertyInfo)
        {
            var enumAttr = propertyInfo.GetCustomAttribute<EnumStringAttribute>();
            if (enumAttr != null && enumAttr.EnumType.IsEnum)
            {
                var enumValues = Enum.GetNames(enumAttr.EnumType);
                
                // 将枚举值添加到Schema的枚举列表,Swagger UI会显示这些可选值
                schema.Enum.Clear();
                foreach (var value in enumValues)
                {
                    schema.Enum.Add(new OpenApiString(value));
                }
                
                // 更新字段描述,明确列出可选值
                schema.Description = $"可选值:{string.Join(", ", enumValues)}";
            }
        }
    }
}

4. 注册SchemaFilter到Swagger

在Program.cs中配置Swagger时,注册自定义的SchemaFilter:

builder.Services.AddSwaggerGen(c =>
{
    c.SchemaFilter<EnumStringSchemaFilter>();
    // 其他Swagger配置(比如文档信息、XML注释等)
});

效果说明

配置完成后,在Swagger UI中查看FooDTO的Schema时,Color字段会:

  • 在枚举值区域显示Purple、Blue、Pink三个可选字符串
  • 字段描述中明确列出所有可选值,方便API使用者参考

内容的提问来源于stack exchange,提问作者Superman.Lopez

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.22 13:46:10