Azure Functions OpenAPI扩展:枚举默认值省略与属性筛选问题
解决Azure Functions OpenAPI扩展枚举参数的两个问题
问题1:可选枚举参数自动带默认值
你的LevelEnum中Bronze是0值,C#枚举默认值为0对应的成员,Azure Functions OpenAPI扩展会自动将这个默认值绑定到可选参数上,导致文档显示参数带有默认值。解决步骤:
- 在
OpenApiParameter属性中显式设置Default = null,告知扩展不要为该可选参数设置默认值 - 修改后的
OpenApiParameter代码:
[OpenApiParameter( name: "levels", In = ParameterLocation.Query, Required = false, Type = typeof(List<LevelEnum>), Description = "List of levels", Default = null // 显式指定默认值为null,避免自动绑定枚举默认值 )]
问题2:无法排除枚举成员Bronze
[JsonIgnore]和[IgnoreDataMember]是Json序列化注解,Azure Functions OpenAPI扩展不识别这类属性。需使用扩展自带的[OpenApiEnumIgnore]属性来标记要排除的枚举成员:
- 确保Azure Functions OpenAPI扩展版本为v1.5.0及以上(该版本开始支持
OpenApiEnumIgnore) - 在
Bronze枚举成员上添加[OpenApiEnumIgnore]属性,修改后的枚举代码:
[JsonConverter(typeof(StringEnumConverter))] public enum LevelEnum { [OpenApiEnumIgnore] // 用此属性排除该枚举成员出现在OpenAPI文档中 Bronze = 0, Silver= 1, Gold = 2, Premium= 3, }
若你的扩展版本较低无法使用OpenApiEnumIgnore,可通过自定义枚举筛选器实现:
创建自定义IOpenApiEnumFilter实现,在筛选逻辑中排除Bronze成员,再注册到OpenAPI扩展配置:
public class CustomEnumFilter : IOpenApiEnumFilter { public void Apply(OpenApiSchema schema, EnumFilterContext context) { // 移除Bronze对应的枚举项 schema.Enum.RemoveAll(item => item.ToString() == "Bronze"); schema.Description = "Valid levels are Silver, Gold, Premium"; } }
在Startup.cs(或FunctionsStartup)中注册:
builder.Services.AddOpenApi(options => { options.AddEnumFilter<CustomEnumFilter>(); });
完成上述操作后,可选参数将不再带有默认值,Bronze也不会出现在OpenAPI文档和Swagger UI的枚举选项中。
内容的提问来源于stack exchange,提问作者Mr.H123
相关产品推荐
相关产品推荐

