.net5 swagger 枚举注释
public class EnumSchemaFilter : ISchemaFilter
{
public void Apply(OpenApiSchema model, SchemaFilterContext context)
{
if (context.Type.IsEnum)
{
model.Enum.Clear();
Enum.GetNames(context.Type)
.ToList()
.ForEach(name =>
{
Enum e = (Enum)Enum.Parse(context.Type, name);
model.Enum.Add(new OpenApiString($"{name}({e.GetEnumDesc()})={Convert.ToInt64(Enum.Parse(context.Type, name))}"));
});
}
}
}
public static class EnumExtensions
{
///
/// 获取枚举信息(枚举名称、描述、值)
///
///
///
public static string GetEnumDesc(this Enum value)
{
var type=value.GetType();
var names = Enum.GetNames(type).ToList();
FieldInfo[] fields = type.GetFields();
foreach (FieldInfo item in fields)
{
if (!names.Contains(item.Name))
{
continue;
}
if (value.ToString() != item.Name)
{
continue;
}
DescriptionAttribute[] EnumAttributes = (DescriptionAttribute[])item.
GetCustomAttributes(typeof(DescriptionAttribute), false);
if (EnumAttributes.Length > 0)
{
return EnumAttributes[0].Description;
}
else
{
return "";
}
}
return "";
}
}
注入
public void ConfigureServices(IServiceCollection services)
{
services.AddControllers();
services.AddSwaggerGen(c =>
{
c.SwaggerDoc("v1", new OpenApiInfo { Title = "WebApplication2", Version = "v1" });
c.SchemaFilter();
});
}