У меня есть вызов API, который определяется следующим образом:
Код: Выделить всё
[HttpGet("GetProductionOrdersForOrderNumber")]
public List GetProductionOrdersForOrderNumber(int orderNumber, int? pos1, int? pos2)
{
// ...
}
В моем Program.cs я настраиваю создание/публикацию схемы следующим образом:
Код: Выделить всё
builder.Services.AddOpenApi(options =>
{
TypeTransformer.MapType(new OpenApiSchema { Type = JsonSchemaType.Number, Format = "decimal" });
TypeTransformer.MapType(new OpenApiSchema { Type = JsonSchemaType.Number | JsonSchemaType.Null, Format = "decimal" });
TypeTransformer.MapType(new OpenApiSchema {Type = JsonSchemaType.Integer | JsonSchemaType.Null, Format = "int32"});
options.AddSchemaTransformer(TypeTransformer.TransformAsync);
});
Код: Выделить всё
"/api/ProductionStateViewer/GetProductionOrdersForOrderNumber": {
"get": {
"tags": [
"ProductionStateViewer"
],
"parameters": [
{
"name": "orderNumber",
"in": "query",
"schema": {
"pattern": "^-?(?:0|[1-9]\\d*)$",
"type": [
"integer",
"string"
],
"format": "int32"
}
},
{
"name": "pos1",
"in": "query",
"schema": {
"pattern": "^-?(?:0|[1-9]\\d*)$",
"type": [
"null",
"integer"
],
"format": "int32"
}
},
{
"name": "pos2",
"in": "query",
"schema": {
"pattern": "^-?(?:0|[1-9]\\d*)$",
"type": [
"null",
"integer"
],
"format": "int32"
}
}
],
"responses": {
"200": {
"description": "OK",
"content": {
"text/plain": {
"schema": {
"type": "array",
"items": {
"$ref": "#/components/schemas/ErpOrder"
}
}
},
"application/json": {
"schema": {
"type": "array",
"items": {
"$ref": "#/components/schemas/ErpOrder"
}
}
},
"text/json": {
"schema": {
"type": "array",
"items": {
"$ref": "#/components/schemas/ErpOrder"
}
}
}
}
}
}
}
},
Размышляя о том, как это может работать, я попытался создать клиент с помощью Kiota. Для этого я использовал следующую команду:
Код: Выделить всё
kiota generate --openapi http://localhost:1037/openapi/v1.json
--language CSharp --class-name ErpInterfaceService
--namespace-name ErpInterfaceServiceRest
--output d:\temp\kiota-test
Код: Выделить всё
OpenAPI warning: #/paths/~1api~1ProductionStateViewer~1GetProductionOrdersForOrderNumber/get/parameters/0/schema - The format int32 is not supported by Kiota for the type Integer, String and the string type will be used.
Конечно, я мог бы добавить строку
Код: Выделить всё
TypeTransformer.MapType(new OpenApiSchema { Type = JsonSchemaType.Integer, Format = "int32" });
Я понимаю, что я, вероятно, мог бы отправить запрос GetProductionOrdersForOrderNumber?orderNumber=Stupid, но не должен ли он обрабатываться каким-то другим способом место?
Кто здесь не прав?
Подробнее здесь: https://stackoverflow.com/questions/798 ... -vs-string
Мобильная версия