Я успешно создал ISchemaFilter
для расширения swagger.json определения свойств перечисления для целей генерации кода, как описано здесь .Вот мой текущий метод 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
правильно работает в определениях моей модели, где класс модели имеет член с типом enum.Ниже приведен пример вывода: resolution
-поле, которое является типом перечисления, обратите внимание на пользовательские 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-метод имеет параметр 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
]
}
IsЕсть ли какой-нибудь способ расширения расширенных схем перечисления, которые являются частью параметров метода?