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

使用Microsoft.Azure.WebJobs.Extensions.OpenApi时,如何让枚举返回名称?(C#)

用Microsoft.Azure.WebJobs.Extensions.OpenApi为枚举生成x-enumNames

核心思路

Microsoft.Azure.WebJobs.Extensions.OpenApi 原生支持通过自定义 IOpenApiSchemaFilter 扩展Schema生成逻辑,和Swashbuckle的ISchemaFilter作用一致,且无需额外配置HTTP函数,直接集成在OpenApi扩展体系内。

实现步骤

  1. 编写自定义Schema过滤器
    实现 IOpenApiSchemaFilter 接口,在 Apply 方法中为枚举类型注入 x-enumNames 扩展属性:
using Microsoft.OpenApi.Models;
using Microsoft.Azure.WebJobs.Extensions.OpenApi.Core.Abstractions;
using System;
using System.Collections.Generic;
using System.Linq;

public class EnumNamesSchemaFilter : IOpenApiSchemaFilter
{
    public void Apply(OpenApiSchema schema, SchemaFilterContext context)
    {
        if (context.Type.IsEnum)
        {
            var enumNames = Enum.GetNames(context.Type).ToList();
            schema.Extensions.Add("x-enumNames", new Microsoft.OpenApi.Any.OpenApiStringArray(enumNames));
        }
    }
}
  1. 注册过滤器到OpenApi配置
    在Azure Functions的启动类(无则新建)中,通过 OpenApiConfigurationOptions 注册自定义过滤器:
using Microsoft.Azure.WebJobs;
using Microsoft.Azure.WebJobs.Hosting;
using Microsoft.Azure.WebJobs.Extensions.OpenApi.Core.Configurations;
using Microsoft.Extensions.DependencyInjection;

[assembly: WebJobsStartup(typeof(OpenApiStartup))]
public class OpenApiStartup : IWebJobsStartup
{
    public void Configure(IWebJobsBuilder builder)
    {
        builder.Services.Configure<OpenApiConfigurationOptions>(options =>
        {
            options.SchemaFilters.Add(new EnumNamesSchemaFilter());
        });
    }
}
  1. 验证生成结果
    启动Azure Functions后,访问默认OpenApi文档端点 /api/swagger.json,查看枚举类型的Schema节点,会看到已自动添加 x-enumNames 属性,示例如下:
"OrderStatus": {
  "type": "string",
  "enum": [
    "Pending",
    "Shipped",
    "Delivered"
  ],
  "x-enumNames": [
    "Pending",
    "Shipped",
    "Delivered"
  ]
}

隔离进程模型适配

如果使用隔离进程模型的Azure Functions,需在Program.cs中配置:

var host = new HostBuilder()
    .ConfigureFunctionsWorkerDefaults()
    .ConfigureServices(services =>
    {
        services.Configure<OpenApiConfigurationOptions>(options =>
        {
            options.SchemaFilters.Add(new EnumNamesSchemaFilter());
        });
    })
    .Build();

内容的提问来源于stack exchange,提问作者Paul Johnson

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.08 21:35:12