ServiceStack升级后OpenAPI Swagger UI枚举未显示为下拉框
解决ServiceStack 6.5.0 OpenAPI中枚举显示为文本框的问题
核心原因
ServiceStack 6+的OpenApiFeature基于OpenAPI 3.x规范,和旧版ServiceStack.Api.Swagger(基于Swagger 2.0)的枚举处理逻辑不同。你之前用string类型加[ApiAllowableValues]的方式,在新的OpenAPI实现里不会被识别为枚举类型,所以Swagger UI只会显示文本框。
解决方案
把DTO中的属性类型直接改成对应的枚举类型,不需要额外的[ApiAllowableValues],OpenAPI会自动识别并生成下拉框:
修改后的DTO代码
[Route("my-route", "GET", Summary = "My summary")] public class MyClass : IReturn<MyResponse> { [ApiMember(Name = "Alphabet", Description = "Alphabet", ParameterType = "path", IsRequired = true)] public Alphabets Alphabet { get; set; } }
枚举代码(保持不变)
public enum Alphabets { A, B, C, D }
特殊情况处理(如果必须用string类型)
如果因为兼容旧接口等原因不能改成枚举类型,可以通过配置OpenApiFeature的AddEnumStringTypes选项,让字符串类型的枚举映射被识别:
Plugins.Add(new OpenApiFeature { AddEnumStringTypes = true });
同时保留[ApiAllowableValues]和string类型属性,这样Swagger UI也会渲染下拉框。不过更推荐用强类型枚举,既符合规范也更易维护。
内容的提问来源于stack exchange,提问作者Sibin
相关产品推荐
相关产品推荐

