有没有一种方法可以像描述基于枚举的API那样,使用最小的API来描述Swagger中的枚举?
我有一个简单的枚举:
public enum GeometryType
{
WKT,
GeoJson
}
字符串
和一个端点:
app.MapGet("/geometry", (GeometryType? geometryType) =>
{
};
型
但是参数在我的swagger页面中被定义为一个字符串,因此我没有像使用控制器那样使用可用选项获得漂亮的结果:
{
"name": "geometryType",
"in": "query",
"schema": {
"type": "string"
}
}
型
我尝试在Swagger设置中显式Map类型:
services.AddSwaggerGen(options =>
{
options.MapType<GeometryType>(() => new OpenApiSchema { Type = "integer", Format = "int32", Enum = Enum.GetNames(typeof(GeometryType)).Select(name => new OpenApiString(name)).Cast<IOpenApiAny>().ToList() });
});
型
但是这种类型从来没有出现在我的swagger.json页面中,这让我相信它与.Net创建端点的方式有关。
2条答案
按热度按时间ttisahbt1#
首先,你需要确定它是否在正常的web API中工作。如果不工作,请确保将
[JsonConverter(typeof(JsonStringEnumConverter))]
添加到enum中字符串
或者在Program.cs中全局添加
JsonStringEnumConverter
:型
然后,必须在参数之前定义
[FromQuery]
:型
json应该是:
型
结果:
2guxujil2#
为了确保Swagger(OpenAPI)正确识别枚举类型并提供具有可用选项的转换器,您可以使用**[JsonConverter]**属性为枚举类型指定自定义转换器。
范例:
字符串
在此代码中,**[JsonConverter(typeof(JsonStringEnumConverter))]**属性应用于SampleEnum枚举。这将指示Swagger在Swagger UI中将枚举表示为字符串,从而允许您在通过Swagger UI测试API时查看具有可用枚举选项的枚举。