【发布时间】:2019-09-14 21:01:34
【问题描述】:
我已成功创建 ISchemaFilter 来扩展 swagger.json 枚举属性定义以用于代码生成目的,如 here 所述。这是我目前的SchemaFilter.Apply 方法:
public void Apply(Schema schema, SchemaFilterContext context)
{
if (context.SystemType.IsEnum)
{
var names = Enum.GetNames(context.SystemType);
var values = Enum.GetValues(context.SystemType);
var desc = "";
foreach (var value in values)
{
var intValue = Convert.ChangeType(value, Enum.GetUnderlyingType(value.GetType()));
desc += $"{intValue}={value},";
}
desc = desc.TrimEnd(',');
schema.Extensions.Add("x-enumNames", names);
schema.Extensions["description"] = desc;
}
}
SchemaFilter 在我的模型定义中正常工作,其中模型类具有枚举类型的成员。以下是输出示例:resolution-field,为枚举类型,注意自定义x-enumNames和修改description字段:
resolution: {
format: "int32",
enum: [
1,
2,
3,
4
],
type: "integer",
x-enumNames: [
"Hour",
"Day",
"Month",
"Year"
],
description: "1=Hour,2=Day,3=Month,4=Year"
}
问题是SchemaFilter 没有扩展操作参数中的枚举类型。例如下面的 api-method 有参数resolution:
public async Task<ActionResult<ReturnType>> GetData(Models.ResolutionEnum resolution)
这会为 swagger.json 生成以下操作参数定义(注意缺少x-EnumNames):
{
name: "resolution",
in: "query",
required: true,
type: "integer",
format: "int32",
enum: [
1,
2,
3,
4
]
}
是否有任何方法可以扩展作为方法参数一部分的 swagger 枚举模式?
【问题讨论】:
标签: c# asp.net-core enums swagger swashbuckle