Azure Function Http Trigger(Open API,.NET 6)枚举下拉菜单显示值异常问题
Azure Function Http Trigger(Open API,.NET 6)枚举下拉菜单显示值异常问题
我太懂你这种糟心的情况了——你在Azure Function里定义了Hostname枚举,本来想让OpenAPI的下拉菜单显示Hostname1、HostName2这些友好名称,结果界面上却跳出0、1、2这些冰冷的数字,完全不是你想要的效果对吧?
别着急,这其实是.NET 6结合Azure Function OpenAPI扩展时的默认行为导致的:默认情况下,OpenAPI会把枚举的整数数值暴露给Swagger UI,而不是我们定义的枚举字符串名称。下面给你两个简单靠谱的解决办法,你挑适合自己的来:
方法一:给枚举类添加序列化特性(推荐)
这是最一劳永逸的方式,直接给你的Hostname枚举加上StringEnumConverter特性,让序列化组件优先用枚举的字符串名称来处理。
首先确保你引用了Newtonsoft.Json这个NuGet包(Azure Function的OpenAPI扩展默认依赖它),然后修改枚举代码:
using Newtonsoft.Json; using Newtonsoft.Json.Converters; [JsonConverter(typeof(StringEnumConverter))] public enum Hostname { Hostname1, HostName2, HostName3, }
加完这个特性后,不管是接口的请求响应序列化,还是OpenAPI UI里的下拉菜单,都会显示枚举的字符串名称了。
方法二:在OpenAPI参数配置里手动指定枚举选项
如果你不想给枚举加全局特性,也可以在你的函数操作的OpenAPI配置里,手动指定枚举的可选值。比如在你的OpenApiOperation特性下面,加上OpenApiParameter配置:
[FunctionName("OpenAPIFunction")] [OpenApiOperation(operationId: "Run", tags: new[] { "name" })] [OpenApiSecurity("function_key", SecuritySchemeType.ApiKey, Name = "code", In = OpenApiSecurityLocationType.Query)] // 新增这个参数配置,明确指定枚举的选项 [OpenApiParameter( name: "hostname", In = ParameterLocation.Query, // 这里要和你实际的参数位置对应,比如Path/Body Required = true, Type = typeof(Hostname), Description = "选择目标主机名", Enum = new[] { "Hostname1", "HostName2", "HostName3" })] [OpenApiResponseWithBody(statusCode: HttpStatusCode.OK, contentType: "application/json", bodyType: typeof(string), Description = "成功响应")] public async Task<IActionResult> Run( [HttpTrigger(AuthorizationLevel.Function, "get", Route = null)] HttpRequest req, Hostname hostname, ILogger log) { // 你的函数逻辑 return new OkObjectResult($"你选择的主机名是:{hostname}"); }
这个方式更灵活,适合只在某个特定接口里需要修改枚举显示的场景。
另外还要提醒你一下:要确保函数的参数是直接绑定到Hostname枚举类型,而不是int类型,不然就算配置对了,参数接收也会出问题哦。
备注:内容来源于stack exchange,提问作者HarshSharma
相关产品推荐
相关产品推荐

