diff --git a/modules/openapi-generator/src/main/resources/csharp/libraries/generichost/api.mustache b/modules/openapi-generator/src/main/resources/csharp/libraries/generichost/api.mustache index f75235833fbe..c8855162a1ee 100644 --- a/modules/openapi-generator/src/main/resources/csharp/libraries/generichost/api.mustache +++ b/modules/openapi-generator/src/main/resources/csharp/libraries/generichost/api.mustache @@ -477,8 +477,11 @@ namespace {{packageName}}.{{apiPackage}} List> formParameterLocalVars = new List>(); - multipartContentLocalVar.Add(new FormUrlEncodedContent(formParameterLocalVars));{{/-first}}{{^isFile}}{{#required}} + multipartContentLocalVar.Add(new FormUrlEncodedContent(formParameterLocalVars)); + {{/-first}} + {{^isFile}} + {{#required}} formParameterLocalVars.Add(new KeyValuePair("{{baseName}}", ClientUtils.ParameterToString({{paramName}}))); {{/required}} @@ -490,13 +493,41 @@ namespace {{packageName}}.{{apiPackage}} {{/isFile}} {{#isFile}} {{#required}} + {{#isContainer}} + foreach (global::System.IO.Stream streamLocalVar in {{paramName}}) + { + global::System.Net.Http.StreamContent streamContentLocalVar = new global::System.Net.Http.StreamContent(streamLocalVar); + streamContentLocalVar.Headers.ContentDisposition = new ContentDispositionHeaderValue("form-data") + { + Name = "\"files\"", + FileName = "\"file\"" + }; + multipartContentLocalVar.Add(streamContentLocalVar); + } + + {{/isContainer}} + {{^isContainer}} multipartContentLocalVar.Add(new StreamContent({{paramName}})); + {{/isContainer}} {{/required}} {{^required}} if ({{paramName}}.IsSet) + {{#isContainer}} + foreach (global::System.IO.Stream streamLocalVar in {{paramName}}.Value) + { + var streamContentLocalVar = new global::System.Net.Http.StreamContent(file); + streamContentLocalVar.Headers.ContentDisposition = new ContentDispositionHeaderValue("form-data") + { + Name = "\"files\"", + FileName = "\"file\"" + }; + multipartContentLocalVar.Add(streamContentLocalVar); + } + {{/isContainer}} + {{^isContainer}} multipartContentLocalVar.Add(new StreamContent({{paramName}}.Value)); - + {{/isContainer}} {{/required}} {{/isFile}} {{/formParams}} diff --git a/modules/openapi-generator/src/test/resources/3_0/csharp/petstore-with-fake-endpoints-models-for-testing-with-http-signature.yaml b/modules/openapi-generator/src/test/resources/3_0/csharp/petstore-with-fake-endpoints-models-for-testing-with-http-signature.yaml index 1c9e901ad0dd..90a134dfed53 100644 --- a/modules/openapi-generator/src/test/resources/3_0/csharp/petstore-with-fake-endpoints-models-for-testing-with-http-signature.yaml +++ b/modules/openapi-generator/src/test/resources/3_0/csharp/petstore-with-fake-endpoints-models-for-testing-with-http-signature.yaml @@ -17,6 +17,36 @@ tags: - name: user description: Operations about user paths: + /upload: + post: + summary: Upload multiple files + operationId: uploadFiles + requestBody: + required: true + content: + multipart/form-data: + schema: + type: object + properties: + files: + type: array + items: + type: string + format: binary + required: + - files + responses: + '200': + description: Files uploaded successfully + content: + application/json: + schema: + type: object + properties: + message: + type: string + fileCount: + type: integer /roles/report: get: responses: