.NET 9 OPENAPI ENUM Создание схемыC#

Место общения программистов C#
Anonymous
.NET 9 OPENAPI ENUM Создание схемы

Сообщение Anonymous »

Я пытаюсь получить правильное генерацию перечисления через OpenAPI в моем основном проекте ASP.NET, чтобы я мог создать схему TypeScript, используя

Код: Выделить всё

npx openapi-typescript https://localhost:7088/openapi/v1.json -o ./apiSchema.ts --enum
.
Поскольку реализация OpenAPI по умолчанию в Net9 генерирует только enum как целые числа, которые я изучал в трансформаторах схемы. Однако я не полностью узнал, как их использовать и не нашел документы, которые помогли мне с проблемой, что она удваивает схему. < /P>

Код: Выделить всё

var enumCache = new Dictionary();
options.AddSchemaTransformer(async delegate(
OpenApiSchema schema,
OpenApiSchemaTransformerContext context,
CancellationToken ct)
{
if (context?.JsonPropertyInfo?.PropertyType.IsEnum == true)
{
if (enumCache.TryGetValue(context.JsonPropertyInfo.PropertyType, out var enumSchema))
{
Console.WriteLine($"prop: {context?.JsonPropertyInfo?.Name}: enumSchema:{enumSchema} - from cache");
schema = enumSchema;
return;
}

var enumNames = Enum.GetNames(context.JsonPropertyInfo.PropertyType);
var enumValues = Enum.GetValues(context.JsonPropertyInfo.PropertyType);
var enumDesc = enumValues.Cast().Select(
(value, index) =>
{
// get description attribute via reflection
var attr = context.JsonPropertyInfo.PropertyType.GetField(value.ToString())?
.GetCustomAttribute();

return new
{
Value = (int) value,
Name = enumNames[index],
Description = attr?.Description
};
});

var openApiValueArray = new OpenApiArray();
var openApiNameArray = new OpenApiArray();
var openApiDescArray = new OpenApiArray();
foreach (var item in enumDesc)
{
openApiValueArray.Add(new OpenApiInteger(item.Value));
openApiNameArray.Add(new OpenApiString(item.Name));
openApiDescArray.Add(new OpenApiString(item.Description));
}
schema.Extensions.Add("x-enum-varnames", openApiNameArray); // https://openapi-ts.dev/advanced#enum-extensions
schema.Extensions.Add("x-enum-descriptions", openApiDescArray);
schema.Extensions.Add("enum", openApiValueArray);

enumCache[context.JsonPropertyInfo.PropertyType] = schema;

return;
}

return;
});
< /code>
Это (частичный) пример, где типы удваиваются. Это также влияет на все содержащие типы и конечные точки, затем использует неправильную «старую» схему. < /P>
      "WorldStatus": {
"type": "integer",
"x-enum-varnames": [
"Active",
"Maintenance",
"Full",
"Ended"
],
"x-enum-descriptions": [
null,
null,
null,
"game over"
],
"enum": [
0,
1,
2,
3
]
},
"WorldStatus2": {
"type": "integer"
}
< /code>
test enum: < /p>
public enum WorldStatus
{
Active,
Maintenance,
Full,

[Description("game over")]
Ended
}
Итак, мой вопрос о том, как удалить схему по умолчанию/исходной схеме. У меня есть ощущение, что должен быть более простой способ, а затем также создать операцию Transformer , которые проверяют каждый тип и его внутренние типы.

Подробнее здесь: https://stackoverflow.com/questions/795 ... a-creation

Вернуться в «C#»