NSwag
NSwag copied to clipboard
С# client generation is missing default values for parameters
Api description in bi-swagger.json:
{
"openapi": "3.0.1",
"paths": {
"/api/integration/bi/reports/profiles": {
"get": {
"tags": [
"Reports"
],
"operationId": "GetProfileReportAsync",
"parameters": [
{
"name": "from",
"in": "query",
"schema": {
"type": "string",
"format": "date-time"
}
},
{
"name": "to",
"in": "query",
"schema": {
"type": "string",
"format": "date-time"
}
},
{
"name": "skip",
"in": "query",
"schema": {
"type": "integer",
"format": "int32"
}
},
{
"name": "api-version",
"in": "header",
"description": "The requested API version",
"required": true,
"schema": {
"type": "string",
"default": "2.0"
}
}
],
"responses": {
"200": {
"description": "Success",
"content": {
"text/plain": {
"schema": {
"type": "array",
"items": {
"$ref": "#/components/schemas/ProfileReportItem"
}
}
},
"application/json": {
"schema": {
"type": "array",
"items": {
"$ref": "#/components/schemas/ProfileReportItem"
}
}
},
"text/json": {
"schema": {
"type": "array",
"items": {
"$ref": "#/components/schemas/ProfileReportItem"
}
}
}
}
}
}
}
}
},
"components": {
"schemas": {
"ProfileReportItem": {
"type": "object",
"properties": {
"id": {
"type": "string",
"format": "uuid"
}
},
"additionalProperties": false
}
}
}
}
Nswag file bi-client.nswag:
{
"runtime": "Net50",
"defaultVariables": null,
"documentGenerator": {
"fromDocument": {
"url": "./bi-swagger.json",
"output": null,
"newLineBehavior": "Auto"
}
},
"codeGenerators": {
"openApiToCSharpClient": {
"clientBaseClass": null,
"configurationClass": null,
"generateClientClasses": true,
"generateClientInterfaces": true,
"clientBaseInterface": null,
"injectHttpClient": true,
"disposeHttpClient": true,
"protectedMethods": [],
"generateExceptionClasses": true,
"exceptionClass": "ApiException",
"wrapDtoExceptions": true,
"useHttpClientCreationMethod": false,
"httpClientType": "System.Net.Http.HttpClient",
"useHttpRequestMessageCreationMethod": false,
"useBaseUrl": true,
"generateBaseUrlProperty": true,
"generateSyncMethods": false,
"exposeJsonSerializerSettings": false,
"clientClassAccessModifier": "public",
"typeAccessModifier": "public",
"generateContractsOutput": false,
"contractsNamespace": null,
"contractsOutputFilePath": null,
"parameterDateTimeFormat": "s",
"parameterDateFormat": "yyyy-MM-dd",
"generateUpdateJsonSerializerSettingsMethod": true,
"useRequestAndResponseSerializationSettings": false,
"serializeTypeInformation": false,
"queryNullValue": "",
"className": "NcsClient",
"operationGenerationMode": "MultipleClientsFromOperationId",
"additionalNamespaceUsages": [],
"additionalContractNamespaceUsages": [],
"generateOptionalParameters": true,
"generateJsonMethods": false,
"enforceFlagEnums": false,
"parameterArrayType": "System.Collections.Generic.IEnumerable",
"parameterDictionaryType": "System.Collections.Generic.IDictionary",
"responseArrayType": "System.Collections.Generic.ICollection",
"responseDictionaryType": "System.Collections.Generic.IDictionary",
"wrapResponses": false,
"wrapResponseMethods": [],
"generateResponseClasses": true,
"responseClass": "SwaggerResponse",
"namespace": "IDT.Boss.Compliance.Client.BI",
"requiredPropertiesMustBeDefined": true,
"dateType": "System.DateTimeOffset",
"jsonConverters": null,
"anyType": "object",
"dateTimeType": "System.DateTimeOffset",
"timeType": "System.TimeSpan",
"timeSpanType": "System.TimeSpan",
"arrayType": "System.Collections.Generic.ICollection",
"arrayInstanceType": "System.Collections.ObjectModel.Collection",
"dictionaryType": "System.Collections.Generic.IDictionary",
"dictionaryInstanceType": "System.Collections.Generic.Dictionary",
"arrayBaseType": "System.Collections.ObjectModel.Collection",
"dictionaryBaseType": "System.Collections.Generic.Dictionary",
"classStyle": "Poco",
"generateDefaultValues": true,
"generateDataAnnotations": true,
"excludedTypeNames": [],
"excludedParameterNames": [],
"handleReferences": false,
"generateImmutableArrayProperties": false,
"generateImmutableDictionaryProperties": false,
"jsonSerializerSettingsTransformationMethod": null,
"inlineNamedArrays": false,
"inlineNamedDictionaries": false,
"inlineNamedTuples": true,
"inlineNamedAny": false,
"generateDtoTypes": true,
"generateOptionalPropertiesAsNullable": false,
"generateNullableReferenceTypes": false,
"templateDirectory": null,
"typeNameGeneratorType": null,
"propertyNameGeneratorType": null,
"enumNameGeneratorType": null,
"serviceHost": null,
"serviceSchemes": null,
"output": "NcsClient.cs",
"newLineBehavior": "Auto"
}
}
}
Command line:
dotnet nswag run bi-client.nswag
Actual result:
... GetProfileReportAsync(string api_version, ...
Changing description to required: false
results in:
... string api_version = null ...
Expected result: ... string api_version = "2.0" ...
Env: NSwag command line tool for .NET Core Net50, toolchain v13.13.2.0 (NJsonSchema v10.5.2.0 (Newtonsoft.Json v12.0.0.0))
I agree, it would be nice to have such a feature
+1
That would be nice feature 👍
When
What is the status of this issue? It seems like a bug, not like a "nice to have feature". Please relate to this. I have a similar problem to the issue author. In my API endpoint request object we have property:
bool include_content = true
and the generated code produces
bool? include_content = null
swagger.json
{ "name": "include_content", "in": "query", "schema": { "type": "boolean", "default": true } },
So two things are inconsistent in the generated client code: 1. The type. Nullable Bool instead of Bool 2. The default value is null instead of true.
Originally posted by @damian5996 in https://github.com/RicoSuter/NSwag/issues/4010#issuecomment-1947552146