.NET 6 Minimal API如何在Swagger中定义枚举参数
在.NET 6 Minimal API中实现Swagger枚举下拉框
可以实现和控制器API一致的Swagger枚举下拉效果,只需调整配置与参数绑定方式,具体步骤如下:
1. 确认枚举定义
确保你的枚举类型定义正常:
public enum GeometryType { WKT, GeoJson }
2. 配置SwaggerGen识别枚举
在Program.cs的Swagger配置中,添加枚举序列化规则,让Swagger生成枚举可选值:
builder.Services.AddSwaggerGen(c => { // 将枚举以字符串形式展示并生成下拉选项 c.DescribeAllEnumsAsStrings(); // 可选:若需为枚举添加描述,可启用注解支持 c.EnableAnnotations(); });
3. 显式绑定Minimal API参数
Minimal API默认参数绑定不会自动标记枚举类型的元数据,需在端点定义中显式指定绑定源并启用OpenAPI生成:
app.MapGet("/geometry", ([FromQuery] GeometryType? type) => { // 业务逻辑实现 return Results.Ok($"选中类型:{type}"); }) .WithName("GetGeometry") .WithOpenApi(); // 关键:触发Swagger生成该端点的完整Schema,包含枚举信息
4. 验证效果
启动项目后访问Swagger页面,/geometry端点的type参数会显示为包含WKT、GeoJson的下拉框,而非普通字符串输入框。
常见问题排查
- 若未生效,检查是否遗漏
.WithOpenApi()调用:该方法强制Swagger生成端点的详细元数据,包括枚举类型信息。 - 确认
DescribeAllEnumsAsStrings()已添加到SwaggerGen配置,它会让Swagger使用枚举名称而非数值,并生成可选值列表。 - 可空枚举(
GeometryType?)会自动添加null作为可选选项,符合参数定义。
内容的提问来源于stack exchange,提问作者A Wheeler
相关产品推荐
相关产品推荐

