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

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.02 05:20:23