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

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]属性来标记要排除的枚举成员:

  1. 确保Azure Functions OpenAPI扩展版本为v1.5.0及以上(该版本开始支持OpenApiEnumIgnore)
  2. 在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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.23 06:18:21