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 1c872fd8afb7..289527299baf 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 @@ -473,8 +473,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}} @@ -486,13 +489,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 d4a570cdb157..3dff9ee51c27 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: diff --git a/samples/client/echo_api/csharp/restsharp/net8/EchoApi/.openapi-generator/VERSION b/samples/client/echo_api/csharp/restsharp/net8/EchoApi/.openapi-generator/VERSION index 4c631cf217a2..e465da43155f 100644 --- a/samples/client/echo_api/csharp/restsharp/net8/EchoApi/.openapi-generator/VERSION +++ b/samples/client/echo_api/csharp/restsharp/net8/EchoApi/.openapi-generator/VERSION @@ -1 +1 @@ -7.14.0-SNAPSHOT +7.14.0 diff --git a/samples/client/echo_api/csharp/restsharp/net8/EchoApi/README.md b/samples/client/echo_api/csharp/restsharp/net8/EchoApi/README.md index 2e1a5cbfb063..94643e0de91c 100644 --- a/samples/client/echo_api/csharp/restsharp/net8/EchoApi/README.md +++ b/samples/client/echo_api/csharp/restsharp/net8/EchoApi/README.md @@ -6,7 +6,7 @@ This C# SDK is automatically generated by the [OpenAPI Generator](https://openap - API version: 0.1.0 - SDK version: 1.0.0 -- Generator version: 7.14.0-SNAPSHOT +- Generator version: 7.14.0 - Build package: org.openapitools.codegen.languages.CSharpClientCodegen diff --git a/samples/client/others/csharp-complex-files/.openapi-generator/VERSION b/samples/client/others/csharp-complex-files/.openapi-generator/VERSION index 4c631cf217a2..e465da43155f 100644 --- a/samples/client/others/csharp-complex-files/.openapi-generator/VERSION +++ b/samples/client/others/csharp-complex-files/.openapi-generator/VERSION @@ -1 +1 @@ -7.14.0-SNAPSHOT +7.14.0 diff --git a/samples/client/others/csharp-complex-files/README.md b/samples/client/others/csharp-complex-files/README.md index 4c7ad4b5e41c..216239638ade 100644 --- a/samples/client/others/csharp-complex-files/README.md +++ b/samples/client/others/csharp-complex-files/README.md @@ -6,7 +6,7 @@ This C# SDK is automatically generated by the [OpenAPI Generator](https://openap - API version: 1.0.0 - SDK version: 1.0.0 -- Generator version: 7.14.0-SNAPSHOT +- Generator version: 7.14.0 - Build package: org.openapitools.codegen.languages.CSharpClientCodegen diff --git a/samples/client/petstore/csharp-functions/.openapi-generator/VERSION b/samples/client/petstore/csharp-functions/.openapi-generator/VERSION index 4c631cf217a2..e465da43155f 100644 --- a/samples/client/petstore/csharp-functions/.openapi-generator/VERSION +++ b/samples/client/petstore/csharp-functions/.openapi-generator/VERSION @@ -1 +1 @@ -7.14.0-SNAPSHOT +7.14.0 diff --git a/samples/client/petstore/csharp/generichost/latest/HelloWorld/.openapi-generator/VERSION b/samples/client/petstore/csharp/generichost/latest/HelloWorld/.openapi-generator/VERSION index 4c631cf217a2..e465da43155f 100644 --- a/samples/client/petstore/csharp/generichost/latest/HelloWorld/.openapi-generator/VERSION +++ b/samples/client/petstore/csharp/generichost/latest/HelloWorld/.openapi-generator/VERSION @@ -1 +1 @@ -7.14.0-SNAPSHOT +7.14.0 diff --git a/samples/client/petstore/csharp/generichost/latest/HelloWorld/src/Org.OpenAPITools/README.md b/samples/client/petstore/csharp/generichost/latest/HelloWorld/src/Org.OpenAPITools/README.md index 93b40a609a0d..7e2c122ec513 100644 --- a/samples/client/petstore/csharp/generichost/latest/HelloWorld/src/Org.OpenAPITools/README.md +++ b/samples/client/petstore/csharp/generichost/latest/HelloWorld/src/Org.OpenAPITools/README.md @@ -104,5 +104,5 @@ namespace YourProject This C# SDK is automatically generated by the [OpenAPI Generator](https://openapi-generator.tech) project. - SDK version: 1.0.0 -- Generator version: 7.14.0-SNAPSHOT +- Generator version: 7.14.0 - Build package: org.openapitools.codegen.languages.CSharpClientCodegen diff --git a/samples/client/petstore/csharp/generichost/latest/OneOfList/.openapi-generator/VERSION b/samples/client/petstore/csharp/generichost/latest/OneOfList/.openapi-generator/VERSION index 4c631cf217a2..e465da43155f 100644 --- a/samples/client/petstore/csharp/generichost/latest/OneOfList/.openapi-generator/VERSION +++ b/samples/client/petstore/csharp/generichost/latest/OneOfList/.openapi-generator/VERSION @@ -1 +1 @@ -7.14.0-SNAPSHOT +7.14.0 diff --git a/samples/client/petstore/csharp/generichost/latest/OneOfList/src/Org.OpenAPITools/README.md b/samples/client/petstore/csharp/generichost/latest/OneOfList/src/Org.OpenAPITools/README.md index 4c69c57c20a0..4499644e5c71 100644 --- a/samples/client/petstore/csharp/generichost/latest/OneOfList/src/Org.OpenAPITools/README.md +++ b/samples/client/petstore/csharp/generichost/latest/OneOfList/src/Org.OpenAPITools/README.md @@ -107,5 +107,5 @@ namespace YourProject This C# SDK is automatically generated by the [OpenAPI Generator](https://openapi-generator.tech) project. - SDK version: 1.0.0 -- Generator version: 7.14.0-SNAPSHOT +- Generator version: 7.14.0 - Build package: org.openapitools.codegen.languages.CSharpClientCodegen diff --git a/samples/client/petstore/csharp/generichost/latest/Tags/.openapi-generator/VERSION b/samples/client/petstore/csharp/generichost/latest/Tags/.openapi-generator/VERSION index 4c631cf217a2..e465da43155f 100644 --- a/samples/client/petstore/csharp/generichost/latest/Tags/.openapi-generator/VERSION +++ b/samples/client/petstore/csharp/generichost/latest/Tags/.openapi-generator/VERSION @@ -1 +1 @@ -7.14.0-SNAPSHOT +7.14.0 diff --git a/samples/client/petstore/csharp/generichost/latest/Tags/src/Org.OpenAPITools/README.md b/samples/client/petstore/csharp/generichost/latest/Tags/src/Org.OpenAPITools/README.md index 7a4422cde262..9b3aed4a5d10 100644 --- a/samples/client/petstore/csharp/generichost/latest/Tags/src/Org.OpenAPITools/README.md +++ b/samples/client/petstore/csharp/generichost/latest/Tags/src/Org.OpenAPITools/README.md @@ -115,5 +115,5 @@ namespace YourProject This C# SDK is automatically generated by the [OpenAPI Generator](https://openapi-generator.tech) project. - SDK version: 1.0.0 -- Generator version: 7.14.0-SNAPSHOT +- Generator version: 7.14.0 - Build package: org.openapitools.codegen.languages.CSharpClientCodegen diff --git a/samples/client/petstore/csharp/generichost/net4.7/AllOf/.openapi-generator/VERSION b/samples/client/petstore/csharp/generichost/net4.7/AllOf/.openapi-generator/VERSION index 4c631cf217a2..e465da43155f 100644 --- a/samples/client/petstore/csharp/generichost/net4.7/AllOf/.openapi-generator/VERSION +++ b/samples/client/petstore/csharp/generichost/net4.7/AllOf/.openapi-generator/VERSION @@ -1 +1 @@ -7.14.0-SNAPSHOT +7.14.0 diff --git a/samples/client/petstore/csharp/generichost/net4.7/AllOf/src/Org.OpenAPITools/README.md b/samples/client/petstore/csharp/generichost/net4.7/AllOf/src/Org.OpenAPITools/README.md index 1694c2c866ab..851ce0ecc85b 100644 --- a/samples/client/petstore/csharp/generichost/net4.7/AllOf/src/Org.OpenAPITools/README.md +++ b/samples/client/petstore/csharp/generichost/net4.7/AllOf/src/Org.OpenAPITools/README.md @@ -107,5 +107,5 @@ namespace YourProject This C# SDK is automatically generated by the [OpenAPI Generator](https://openapi-generator.tech) project. - SDK version: 1.0.0 -- Generator version: 7.14.0-SNAPSHOT +- Generator version: 7.14.0 - Build package: org.openapitools.codegen.languages.CSharpClientCodegen diff --git a/samples/client/petstore/csharp/generichost/net4.7/AnyOf/.openapi-generator/VERSION b/samples/client/petstore/csharp/generichost/net4.7/AnyOf/.openapi-generator/VERSION index 4c631cf217a2..e465da43155f 100644 --- a/samples/client/petstore/csharp/generichost/net4.7/AnyOf/.openapi-generator/VERSION +++ b/samples/client/petstore/csharp/generichost/net4.7/AnyOf/.openapi-generator/VERSION @@ -1 +1 @@ -7.14.0-SNAPSHOT +7.14.0 diff --git a/samples/client/petstore/csharp/generichost/net4.7/AnyOf/src/Org.OpenAPITools/README.md b/samples/client/petstore/csharp/generichost/net4.7/AnyOf/src/Org.OpenAPITools/README.md index 6300b93948ec..af72f63e4fad 100644 --- a/samples/client/petstore/csharp/generichost/net4.7/AnyOf/src/Org.OpenAPITools/README.md +++ b/samples/client/petstore/csharp/generichost/net4.7/AnyOf/src/Org.OpenAPITools/README.md @@ -107,5 +107,5 @@ namespace YourProject This C# SDK is automatically generated by the [OpenAPI Generator](https://openapi-generator.tech) project. - SDK version: 1.0.0 -- Generator version: 7.14.0-SNAPSHOT +- Generator version: 7.14.0 - Build package: org.openapitools.codegen.languages.CSharpClientCodegen diff --git a/samples/client/petstore/csharp/generichost/net4.7/AnyOfNoCompare/.openapi-generator/VERSION b/samples/client/petstore/csharp/generichost/net4.7/AnyOfNoCompare/.openapi-generator/VERSION index 4c631cf217a2..e465da43155f 100644 --- a/samples/client/petstore/csharp/generichost/net4.7/AnyOfNoCompare/.openapi-generator/VERSION +++ b/samples/client/petstore/csharp/generichost/net4.7/AnyOfNoCompare/.openapi-generator/VERSION @@ -1 +1 @@ -7.14.0-SNAPSHOT +7.14.0 diff --git a/samples/client/petstore/csharp/generichost/net4.7/AnyOfNoCompare/src/Org.OpenAPITools/README.md b/samples/client/petstore/csharp/generichost/net4.7/AnyOfNoCompare/src/Org.OpenAPITools/README.md index 6300b93948ec..af72f63e4fad 100644 --- a/samples/client/petstore/csharp/generichost/net4.7/AnyOfNoCompare/src/Org.OpenAPITools/README.md +++ b/samples/client/petstore/csharp/generichost/net4.7/AnyOfNoCompare/src/Org.OpenAPITools/README.md @@ -107,5 +107,5 @@ namespace YourProject This C# SDK is automatically generated by the [OpenAPI Generator](https://openapi-generator.tech) project. - SDK version: 1.0.0 -- Generator version: 7.14.0-SNAPSHOT +- Generator version: 7.14.0 - Build package: org.openapitools.codegen.languages.CSharpClientCodegen diff --git a/samples/client/petstore/csharp/generichost/net4.7/FormModels/.openapi-generator/FILES b/samples/client/petstore/csharp/generichost/net4.7/FormModels/.openapi-generator/FILES index 23707e233f05..6ac1f4e71539 100644 --- a/samples/client/petstore/csharp/generichost/net4.7/FormModels/.openapi-generator/FILES +++ b/samples/client/petstore/csharp/generichost/net4.7/FormModels/.openapi-generator/FILES @@ -130,6 +130,7 @@ docs/models/TestResult.md docs/models/TestResultCode.md docs/models/Triangle.md docs/models/TriangleInterface.md +docs/models/UploadFiles200Response.md docs/models/User.md docs/models/Whale.md docs/models/Zebra.md @@ -140,6 +141,7 @@ docs/models/ZeroBasedEnumClassZeroBasedEnum.md docs/scripts/git_push.ps1 docs/scripts/git_push.sh src/Org.OpenAPITools.Test/Api/DependencyInjectionTests.cs +src/Org.OpenAPITools.Test/Model/UploadFiles200ResponseTests.cs src/Org.OpenAPITools.Test/Org.OpenAPITools.Test.csproj src/Org.OpenAPITools.Test/README.md src/Org.OpenAPITools/Api/AnotherFakeApi.cs @@ -295,6 +297,7 @@ src/Org.OpenAPITools/Model/TestResult.cs src/Org.OpenAPITools/Model/TestResultCode.cs src/Org.OpenAPITools/Model/Triangle.cs src/Org.OpenAPITools/Model/TriangleInterface.cs +src/Org.OpenAPITools/Model/UploadFiles200Response.cs src/Org.OpenAPITools/Model/User.cs src/Org.OpenAPITools/Model/Whale.cs src/Org.OpenAPITools/Model/Zebra.cs diff --git a/samples/client/petstore/csharp/generichost/net4.7/FormModels/.openapi-generator/VERSION b/samples/client/petstore/csharp/generichost/net4.7/FormModels/.openapi-generator/VERSION index 4c631cf217a2..e465da43155f 100644 --- a/samples/client/petstore/csharp/generichost/net4.7/FormModels/.openapi-generator/VERSION +++ b/samples/client/petstore/csharp/generichost/net4.7/FormModels/.openapi-generator/VERSION @@ -1 +1 @@ -7.14.0-SNAPSHOT +7.14.0 diff --git a/samples/client/petstore/csharp/generichost/net4.7/FormModels/api/openapi.yaml b/samples/client/petstore/csharp/generichost/net4.7/FormModels/api/openapi.yaml index 3afd9359ab7d..4bd9bd7aa5fa 100644 --- a/samples/client/petstore/csharp/generichost/net4.7/FormModels/api/openapi.yaml +++ b/samples/client/petstore/csharp/generichost/net4.7/FormModels/api/openapi.yaml @@ -41,6 +41,23 @@ tags: - description: Operations about user name: user paths: + /upload: + post: + operationId: uploadFiles + requestBody: + content: + multipart/form-data: + schema: + $ref: "#/components/schemas/uploadFiles_request" + required: true + responses: + "200": + content: + application/json: + schema: + $ref: "#/components/schemas/uploadFiles_200_response" + description: Files uploaded successfully + summary: Upload multiple files /roles/report: get: responses: @@ -2684,6 +2701,26 @@ components: - APPROVED - MANUAL_APPROVAL_REQUIRED type: string + uploadFiles_request: + properties: + files: + items: + format: binary + type: string + type: array + required: + - files + type: object + uploadFiles_200_response: + example: + message: message + fileCount: 0 + properties: + message: + type: string + fileCount: + type: integer + type: object _foo_get_default_response: example: string: diff --git a/samples/client/petstore/csharp/generichost/net4.7/FormModels/docs/apis/DefaultApi.md b/samples/client/petstore/csharp/generichost/net4.7/FormModels/docs/apis/DefaultApi.md index e97541b8b6a5..0fa36d06dcaf 100644 --- a/samples/client/petstore/csharp/generichost/net4.7/FormModels/docs/apis/DefaultApi.md +++ b/samples/client/petstore/csharp/generichost/net4.7/FormModels/docs/apis/DefaultApi.md @@ -9,6 +9,7 @@ All URIs are relative to *http://petstore.swagger.io:80/v2* | [**Hello**](DefaultApi.md#hello) | **GET** /hello | Hello | | [**RolesReportGet**](DefaultApi.md#rolesreportget) | **GET** /roles/report | | | [**Test**](DefaultApi.md#test) | **GET** /test | Retrieve an existing Notificationtest's Elements | +| [**UploadFiles**](DefaultApi.md#uploadfiles) | **POST** /upload | Upload multiple files | # **FooGet** @@ -166,3 +167,37 @@ No authorization required [[Back to top]](#) [[Back to API list]](../../README.md#documentation-for-api-endpoints) [[Back to Model list]](../../README.md#documentation-for-models) [[Back to README]](../../README.md) + +# **UploadFiles** +> UploadFiles200Response UploadFiles (List files) + +Upload multiple files + + +### Parameters + +| Name | Type | Description | Notes | +|------|------|-------------|-------| +| **files** | **List<System.IO.Stream>** | | | + +### Return type + +[**UploadFiles200Response**](UploadFiles200Response.md) + +### Authorization + +No authorization required + +### HTTP request headers + + - **Content-Type**: multipart/form-data + - **Accept**: application/json + + +### HTTP response details +| Status code | Description | Response headers | +|-------------|-------------|------------------| +| **200** | Files uploaded successfully | - | + +[[Back to top]](#) [[Back to API list]](../../README.md#documentation-for-api-endpoints) [[Back to Model list]](../../README.md#documentation-for-models) [[Back to README]](../../README.md) + diff --git a/samples/client/petstore/csharp/generichost/net4.7/FormModels/docs/models/UploadFiles200Response.md b/samples/client/petstore/csharp/generichost/net4.7/FormModels/docs/models/UploadFiles200Response.md new file mode 100644 index 000000000000..8e32fc151b34 --- /dev/null +++ b/samples/client/petstore/csharp/generichost/net4.7/FormModels/docs/models/UploadFiles200Response.md @@ -0,0 +1,11 @@ +# Org.OpenAPITools.Model.UploadFiles200Response + +## Properties + +Name | Type | Description | Notes +------------ | ------------- | ------------- | ------------- +**FileCount** | **int** | | [optional] +**Message** | **string** | | [optional] + +[[Back to Model list]](../../README.md#documentation-for-models) [[Back to API list]](../../README.md#documentation-for-api-endpoints) [[Back to README]](../../README.md) + diff --git a/samples/client/petstore/csharp/generichost/net4.7/FormModels/src/Org.OpenAPITools.Test/Model/UploadFiles200ResponseTests.cs b/samples/client/petstore/csharp/generichost/net4.7/FormModels/src/Org.OpenAPITools.Test/Model/UploadFiles200ResponseTests.cs new file mode 100644 index 000000000000..e6003ac29cfe --- /dev/null +++ b/samples/client/petstore/csharp/generichost/net4.7/FormModels/src/Org.OpenAPITools.Test/Model/UploadFiles200ResponseTests.cs @@ -0,0 +1,74 @@ +/* + * OpenAPI Petstore + * + * This spec is mainly for testing Petstore server and contains fake endpoints, models. Please do not use this for any other purpose. Special characters: \" \\ + * + * The version of the OpenAPI document: 1.0.0 + * Generated by: https://github.com/openapitools/openapi-generator.git + */ + + +using Xunit; + +using System; +using System.Linq; +using System.IO; +using System.Collections.Generic; +using Org.OpenAPITools.Model; +using Org.OpenAPITools.Client; +using System.Reflection; + +namespace Org.OpenAPITools.Test.Model +{ + /// + /// Class for testing UploadFiles200Response + /// + /// + /// This file is automatically generated by OpenAPI Generator (https://openapi-generator.tech). + /// Please update the test case below to test the model. + /// + public class UploadFiles200ResponseTests : IDisposable + { + // TODO uncomment below to declare an instance variable for UploadFiles200Response + //private UploadFiles200Response instance; + + public UploadFiles200ResponseTests() + { + // TODO uncomment below to create an instance of UploadFiles200Response + //instance = new UploadFiles200Response(); + } + + public void Dispose() + { + // Cleanup when everything is done. + } + + /// + /// Test an instance of UploadFiles200Response + /// + [Fact] + public void UploadFiles200ResponseInstanceTest() + { + // TODO uncomment below to test "IsType" UploadFiles200Response + //Assert.IsType(instance); + } + + /// + /// Test the property 'FileCount' + /// + [Fact] + public void FileCountTest() + { + // TODO unit test for the property 'FileCount' + } + + /// + /// Test the property 'Message' + /// + [Fact] + public void MessageTest() + { + // TODO unit test for the property 'Message' + } + } +} diff --git a/samples/client/petstore/csharp/generichost/net4.7/FormModels/src/Org.OpenAPITools/Api/DefaultApi.cs b/samples/client/petstore/csharp/generichost/net4.7/FormModels/src/Org.OpenAPITools/Api/DefaultApi.cs index d58c2e585a05..71bf74039ae8 100644 --- a/samples/client/petstore/csharp/generichost/net4.7/FormModels/src/Org.OpenAPITools/Api/DefaultApi.cs +++ b/samples/client/petstore/csharp/generichost/net4.7/FormModels/src/Org.OpenAPITools/Api/DefaultApi.cs @@ -139,6 +139,29 @@ public interface IDefaultApi : IApi /// Cancellation Token to cancel the request. /// <> Task TestOrDefaultAsync(System.Threading.CancellationToken cancellationToken = default); + + /// + /// Upload multiple files + /// + /// + /// + /// + /// Thrown when fails to make API call + /// + /// Cancellation Token to cancel the request. + /// <> + Task UploadFilesAsync(List files, System.Threading.CancellationToken cancellationToken = default); + + /// + /// Upload multiple files + /// + /// + /// + /// + /// + /// Cancellation Token to cancel the request. + /// <> + Task UploadFilesOrDefaultAsync(List files, System.Threading.CancellationToken cancellationToken = default); } /// @@ -201,6 +224,18 @@ public interface ITestApiResponse : Org.OpenAPITools.Client.IApiResponse, IOk + /// The + /// + public interface IUploadFilesApiResponse : Org.OpenAPITools.Client.IApiResponse, IOk + { + /// + /// Returns true if the response is 200 Ok + /// + /// + bool IsOk { get; } + } + /// /// Represents a collection of functions to interact with the API endpoints /// @@ -305,6 +340,26 @@ internal void ExecuteOnErrorTest(Exception exception) { OnErrorTest?.Invoke(this, new ExceptionEventArgs(exception)); } + + /// + /// The event raised after the server response + /// + public event EventHandler OnUploadFiles; + + /// + /// The event raised after an error querying the server + /// + public event EventHandler OnErrorUploadFiles; + + internal void ExecuteOnUploadFiles(DefaultApi.UploadFilesApiResponse apiResponse) + { + OnUploadFiles?.Invoke(this, new ApiResponseEventArgs(apiResponse)); + } + + internal void ExecuteOnErrorUploadFiles(Exception exception) + { + OnErrorUploadFiles?.Invoke(this, new ExceptionEventArgs(exception)); + } } /// @@ -1358,5 +1413,251 @@ private void OnDeserializationErrorDefaultImplementation(Exception exception, Ht partial void OnDeserializationError(ref bool suppressDefaultLog, Exception exception, HttpStatusCode httpStatusCode); } + + partial void FormatUploadFiles(List files); + + /// + /// Validates the request parameters + /// + /// + /// + private void ValidateUploadFiles(List files) + { + if (files == null) + throw new ArgumentNullException(nameof(files)); + } + + /// + /// Processes the server response + /// + /// + /// + private void AfterUploadFilesDefaultImplementation(IUploadFilesApiResponse apiResponseLocalVar, List files) + { + bool suppressDefaultLog = false; + AfterUploadFiles(ref suppressDefaultLog, apiResponseLocalVar, files); + if (!suppressDefaultLog) + Logger.LogInformation("{0,-9} | {1} | {3}", (apiResponseLocalVar.DownloadedAt - apiResponseLocalVar.RequestedAt).TotalSeconds, apiResponseLocalVar.StatusCode, apiResponseLocalVar.Path); + } + + /// + /// Processes the server response + /// + /// + /// + /// + partial void AfterUploadFiles(ref bool suppressDefaultLog, IUploadFilesApiResponse apiResponseLocalVar, List files); + + /// + /// Logs exceptions that occur while retrieving the server response + /// + /// + /// + /// + /// + private void OnErrorUploadFilesDefaultImplementation(Exception exceptionLocalVar, string pathFormatLocalVar, string pathLocalVar, List files) + { + bool suppressDefaultLogLocalVar = false; + OnErrorUploadFiles(ref suppressDefaultLogLocalVar, exceptionLocalVar, pathFormatLocalVar, pathLocalVar, files); + if (!suppressDefaultLogLocalVar) + Logger.LogError(exceptionLocalVar, "An error occurred while sending the request to the server."); + } + + /// + /// A partial method that gives developers a way to provide customized exception handling + /// + /// + /// + /// + /// + /// + partial void OnErrorUploadFiles(ref bool suppressDefaultLogLocalVar, Exception exceptionLocalVar, string pathFormatLocalVar, string pathLocalVar, List files); + + /// + /// Upload multiple files + /// + /// + /// Cancellation Token to cancel the request. + /// <> + public async Task UploadFilesOrDefaultAsync(List files, System.Threading.CancellationToken cancellationToken = default) + { + try + { + return await UploadFilesAsync(files, cancellationToken).ConfigureAwait(false); + } + catch (Exception) + { + return null; + } + } + + /// + /// Upload multiple files + /// + /// Thrown when fails to make API call + /// + /// Cancellation Token to cancel the request. + /// <> + public async Task UploadFilesAsync(List files, System.Threading.CancellationToken cancellationToken = default) + { + UriBuilder uriBuilderLocalVar = new UriBuilder(); + + try + { + ValidateUploadFiles(files); + + FormatUploadFiles(files); + + using (HttpRequestMessage httpRequestMessageLocalVar = new HttpRequestMessage()) + { + uriBuilderLocalVar.Host = HttpClient.BaseAddress.Host; + uriBuilderLocalVar.Port = HttpClient.BaseAddress.Port; + uriBuilderLocalVar.Scheme = HttpClient.BaseAddress.Scheme; + uriBuilderLocalVar.Path = HttpClient.BaseAddress.AbsolutePath == "/" + ? "/upload" + : string.Concat(HttpClient.BaseAddress.AbsolutePath, "/upload"); + + MultipartContent multipartContentLocalVar = new MultipartContent(); + + httpRequestMessageLocalVar.Content = multipartContentLocalVar; + + List> formParameterLocalVars = new List>(); + + multipartContentLocalVar.Add(new FormUrlEncodedContent(formParameterLocalVars)); + + foreach (global::System.IO.Stream streamLocalVar in files) + { + 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); + } + + httpRequestMessageLocalVar.RequestUri = uriBuilderLocalVar.Uri; + + string[] contentTypes = new string[] { + "multipart/form-data" + }; + + string contentTypeLocalVar = ClientUtils.SelectHeaderContentType(contentTypes); + + if (contentTypeLocalVar != null && httpRequestMessageLocalVar.Content != null) + httpRequestMessageLocalVar.Content.Headers.ContentType = new MediaTypeHeaderValue(contentTypeLocalVar); + + string[] acceptLocalVars = new string[] { + "application/json" + }; + + string acceptLocalVar = ClientUtils.SelectHeaderAccept(acceptLocalVars); + + if (acceptLocalVar != null) + httpRequestMessageLocalVar.Headers.Accept.Add(new MediaTypeWithQualityHeaderValue(acceptLocalVar)); + httpRequestMessageLocalVar.Method = new HttpMethod("POST"); + + DateTime requestedAtLocalVar = DateTime.UtcNow; + + using (HttpResponseMessage httpResponseMessageLocalVar = await HttpClient.SendAsync(httpRequestMessageLocalVar, cancellationToken).ConfigureAwait(false)) + { + string responseContentLocalVar = await httpResponseMessageLocalVar.Content.ReadAsStringAsync().ConfigureAwait(false); + + ILogger apiResponseLoggerLocalVar = LoggerFactory.CreateLogger(); + + UploadFilesApiResponse apiResponseLocalVar = new UploadFilesApiResponse(apiResponseLoggerLocalVar, httpRequestMessageLocalVar, httpResponseMessageLocalVar, responseContentLocalVar, "/upload", requestedAtLocalVar, _jsonSerializerOptions); + + AfterUploadFilesDefaultImplementation(apiResponseLocalVar, files); + + Events.ExecuteOnUploadFiles(apiResponseLocalVar); + + return apiResponseLocalVar; + } + } + } + catch(Exception e) + { + OnErrorUploadFilesDefaultImplementation(e, "/upload", uriBuilderLocalVar.Path, files); + Events.ExecuteOnErrorUploadFiles(e); + throw; + } + } + + /// + /// The + /// + public partial class UploadFilesApiResponse : Org.OpenAPITools.Client.ApiResponse, IUploadFilesApiResponse + { + /// + /// The logger + /// + public ILogger Logger { get; } + + /// + /// The + /// + /// + /// + /// + /// + /// + /// + /// + public UploadFilesApiResponse(ILogger logger, System.Net.Http.HttpRequestMessage httpRequestMessage, System.Net.Http.HttpResponseMessage httpResponseMessage, string rawContent, string path, DateTime requestedAt, System.Text.Json.JsonSerializerOptions jsonSerializerOptions) : base(httpRequestMessage, httpResponseMessage, rawContent, path, requestedAt, jsonSerializerOptions) + { + Logger = logger; + OnCreated(httpRequestMessage, httpResponseMessage); + } + + partial void OnCreated(global::System.Net.Http.HttpRequestMessage httpRequestMessage, System.Net.Http.HttpResponseMessage httpResponseMessage); + + /// + /// Returns true if the response is 200 Ok + /// + /// + public bool IsOk => 200 == (int)StatusCode; + + /// + /// Deserializes the response if the response is 200 Ok + /// + /// + public Org.OpenAPITools.Model.UploadFiles200Response Ok() + { + // This logic may be modified with the AsModel.mustache template + return IsOk + ? System.Text.Json.JsonSerializer.Deserialize(RawContent, _jsonSerializerOptions) + : default; + } + + /// + /// Returns true if the response is 200 Ok and the deserialized response is not null + /// + /// + /// + public bool TryOk(out Org.OpenAPITools.Model.UploadFiles200Response result) + { + result = null; + + try + { + result = Ok(); + } catch (Exception e) + { + OnDeserializationErrorDefaultImplementation(e, (HttpStatusCode)200); + } + + return result != null; + } + + private void OnDeserializationErrorDefaultImplementation(Exception exception, HttpStatusCode httpStatusCode) + { + bool suppressDefaultLog = false; + OnDeserializationError(ref suppressDefaultLog, exception, httpStatusCode); + if (!suppressDefaultLog) + Logger.LogError(exception, "An error occurred while deserializing the {code} response.", httpStatusCode); + } + + partial void OnDeserializationError(ref bool suppressDefaultLog, Exception exception, HttpStatusCode httpStatusCode); + } } } diff --git a/samples/client/petstore/csharp/generichost/net4.7/FormModels/src/Org.OpenAPITools/Api/FakeApi.cs b/samples/client/petstore/csharp/generichost/net4.7/FormModels/src/Org.OpenAPITools/Api/FakeApi.cs index cad9b286184b..2b9df6813355 100644 --- a/samples/client/petstore/csharp/generichost/net4.7/FormModels/src/Org.OpenAPITools/Api/FakeApi.cs +++ b/samples/client/petstore/csharp/generichost/net4.7/FormModels/src/Org.OpenAPITools/Api/FakeApi.cs @@ -4024,7 +4024,6 @@ public async Task TestEndpointParametersAsyn if (binary.IsSet) multipartContentLocalVar.Add(new StreamContent(binary.Value)); - if (callback.IsSet) formParameterLocalVars.Add(new KeyValuePair("callback", ClientUtils.ParameterToString(callback.Value))); @@ -4334,7 +4333,9 @@ public async Task TestEnumParametersAsync(Option List> formParameterLocalVars = new List>(); - multipartContentLocalVar.Add(new FormUrlEncodedContent(formParameterLocalVars)); if (enumFormString.IsSet) + multipartContentLocalVar.Add(new FormUrlEncodedContent(formParameterLocalVars)); + + if (enumFormString.IsSet) formParameterLocalVars.Add(new KeyValuePair("enum_form_string", ClientUtils.ParameterToString(enumFormString.Value))); if (enumFormStringArray.IsSet) diff --git a/samples/client/petstore/csharp/generichost/net4.7/FormModels/src/Org.OpenAPITools/Api/PetApi.cs b/samples/client/petstore/csharp/generichost/net4.7/FormModels/src/Org.OpenAPITools/Api/PetApi.cs index e031f4d97303..769ca8630899 100644 --- a/samples/client/petstore/csharp/generichost/net4.7/FormModels/src/Org.OpenAPITools/Api/PetApi.cs +++ b/samples/client/petstore/csharp/generichost/net4.7/FormModels/src/Org.OpenAPITools/Api/PetApi.cs @@ -2198,7 +2198,9 @@ public async Task UpdatePetWithFormAsync(long pet List> formParameterLocalVars = new List>(); - multipartContentLocalVar.Add(new FormUrlEncodedContent(formParameterLocalVars)); if (name.IsSet) + multipartContentLocalVar.Add(new FormUrlEncodedContent(formParameterLocalVars)); + + if (name.IsSet) formParameterLocalVars.Add(new KeyValuePair("name", ClientUtils.ParameterToString(name.Value))); if (status.IsSet) @@ -2425,12 +2427,13 @@ public async Task UploadFileAsync(long petId, Option> formParameterLocalVars = new List>(); - multipartContentLocalVar.Add(new FormUrlEncodedContent(formParameterLocalVars)); if (additionalMetadata.IsSet) + multipartContentLocalVar.Add(new FormUrlEncodedContent(formParameterLocalVars)); + + if (additionalMetadata.IsSet) formParameterLocalVars.Add(new KeyValuePair("additionalMetadata", ClientUtils.ParameterToString(additionalMetadata.Value))); if (file.IsSet) multipartContentLocalVar.Add(new StreamContent(file.Value)); - List tokenBaseLocalVars = new List(); httpRequestMessageLocalVar.RequestUri = uriBuilderLocalVar.Uri; @@ -2692,7 +2695,9 @@ public async Task UploadFileWithRequired List> formParameterLocalVars = new List>(); - multipartContentLocalVar.Add(new FormUrlEncodedContent(formParameterLocalVars)); multipartContentLocalVar.Add(new StreamContent(requiredFile)); + multipartContentLocalVar.Add(new FormUrlEncodedContent(formParameterLocalVars)); + + multipartContentLocalVar.Add(new StreamContent(requiredFile)); if (additionalMetadata.IsSet) formParameterLocalVars.Add(new KeyValuePair("additionalMetadata", ClientUtils.ParameterToString(additionalMetadata.Value))); diff --git a/samples/client/petstore/csharp/generichost/net4.7/FormModels/src/Org.OpenAPITools/Client/HostConfiguration.cs b/samples/client/petstore/csharp/generichost/net4.7/FormModels/src/Org.OpenAPITools/Client/HostConfiguration.cs index 57b402a3000e..66b2e7a2a7c8 100644 --- a/samples/client/petstore/csharp/generichost/net4.7/FormModels/src/Org.OpenAPITools/Client/HostConfiguration.cs +++ b/samples/client/petstore/csharp/generichost/net4.7/FormModels/src/Org.OpenAPITools/Client/HostConfiguration.cs @@ -188,6 +188,7 @@ public HostConfiguration(IServiceCollection services) _jsonOptions.Converters.Add(new TestResultCodeNullableJsonConverter()); _jsonOptions.Converters.Add(new TriangleJsonConverter()); _jsonOptions.Converters.Add(new TriangleInterfaceJsonConverter()); + _jsonOptions.Converters.Add(new UploadFiles200ResponseJsonConverter()); _jsonOptions.Converters.Add(new UserJsonConverter()); _jsonOptions.Converters.Add(new WhaleJsonConverter()); _jsonOptions.Converters.Add(new ZebraJsonConverter()); diff --git a/samples/client/petstore/csharp/generichost/net4.7/FormModels/src/Org.OpenAPITools/Model/UploadFiles200Response.cs b/samples/client/petstore/csharp/generichost/net4.7/FormModels/src/Org.OpenAPITools/Model/UploadFiles200Response.cs new file mode 100644 index 000000000000..9166257e1cbe --- /dev/null +++ b/samples/client/petstore/csharp/generichost/net4.7/FormModels/src/Org.OpenAPITools/Model/UploadFiles200Response.cs @@ -0,0 +1,200 @@ +// +/* + * OpenAPI Petstore + * + * This spec is mainly for testing Petstore server and contains fake endpoints, models. Please do not use this for any other purpose. Special characters: \" \\ + * + * The version of the OpenAPI document: 1.0.0 + * Generated by: https://github.com/openapitools/openapi-generator.git + */ + +using System; +using System.Collections; +using System.Collections.Generic; +using System.Collections.ObjectModel; +using System.Linq; +using System.IO; +using System.Text; +using System.Text.RegularExpressions; +using System.Text.Json; +using System.Text.Json.Serialization; +using System.ComponentModel.DataAnnotations; +using OpenAPIClientUtils = Org.OpenAPITools.Client.ClientUtils; +using Org.OpenAPITools.Client; + +namespace Org.OpenAPITools.Model +{ + /// + /// UploadFiles200Response + /// + public partial class UploadFiles200Response : IValidatableObject + { + /// + /// Initializes a new instance of the class. + /// + /// fileCount + /// message + [JsonConstructor] + public UploadFiles200Response(Option fileCount = default, Option message = default) + { + FileCountOption = fileCount; + MessageOption = message; + OnCreated(); + } + + partial void OnCreated(); + + /// + /// Used to track the state of FileCount + /// + [JsonIgnore] + [global::System.ComponentModel.EditorBrowsable(global::System.ComponentModel.EditorBrowsableState.Never)] + public Option FileCountOption { get; private set; } + + /// + /// Gets or Sets FileCount + /// + [JsonPropertyName("fileCount")] + public int? FileCount { get { return this.FileCountOption; } set { this.FileCountOption = new Option(value); } } + + /// + /// Used to track the state of Message + /// + [JsonIgnore] + [global::System.ComponentModel.EditorBrowsable(global::System.ComponentModel.EditorBrowsableState.Never)] + public Option MessageOption { get; private set; } + + /// + /// Gets or Sets Message + /// + [JsonPropertyName("message")] + public string Message { get { return this.MessageOption; } set { this.MessageOption = new Option(value); } } + + /// + /// Gets or Sets additional properties + /// + [JsonExtensionData] + public Dictionary AdditionalProperties { get; } = new Dictionary(); + + /// + /// Returns the string presentation of the object + /// + /// String presentation of the object + public override string ToString() + { + StringBuilder sb = new StringBuilder(); + sb.Append("class UploadFiles200Response {\n"); + sb.Append(" FileCount: ").Append(FileCount).Append("\n"); + sb.Append(" Message: ").Append(Message).Append("\n"); + sb.Append(" AdditionalProperties: ").Append(AdditionalProperties).Append("\n"); + sb.Append("}\n"); + return sb.ToString(); + } + + /// + /// To validate all properties of the instance + /// + /// Validation context + /// Validation Result + IEnumerable IValidatableObject.Validate(ValidationContext validationContext) + { + yield break; + } + } + + /// + /// A Json converter for type + /// + public class UploadFiles200ResponseJsonConverter : JsonConverter + { + /// + /// Deserializes json to + /// + /// + /// + /// + /// + /// + public override UploadFiles200Response Read(ref Utf8JsonReader utf8JsonReader, Type typeToConvert, JsonSerializerOptions jsonSerializerOptions) + { + int currentDepth = utf8JsonReader.CurrentDepth; + + if (utf8JsonReader.TokenType != JsonTokenType.StartObject && utf8JsonReader.TokenType != JsonTokenType.StartArray) + throw new JsonException(); + + JsonTokenType startingTokenType = utf8JsonReader.TokenType; + + Option fileCount = default; + Option message = default; + + while (utf8JsonReader.Read()) + { + if (startingTokenType == JsonTokenType.StartObject && utf8JsonReader.TokenType == JsonTokenType.EndObject && currentDepth == utf8JsonReader.CurrentDepth) + break; + + if (startingTokenType == JsonTokenType.StartArray && utf8JsonReader.TokenType == JsonTokenType.EndArray && currentDepth == utf8JsonReader.CurrentDepth) + break; + + if (utf8JsonReader.TokenType == JsonTokenType.PropertyName && currentDepth == utf8JsonReader.CurrentDepth - 1) + { + string localVarJsonPropertyName = utf8JsonReader.GetString(); + utf8JsonReader.Read(); + + switch (localVarJsonPropertyName) + { + case "fileCount": + fileCount = new Option(utf8JsonReader.TokenType == JsonTokenType.Null ? (int?)null : utf8JsonReader.GetInt32()); + break; + case "message": + message = new Option(utf8JsonReader.GetString()); + break; + default: + break; + } + } + } + + if (fileCount.IsSet && fileCount.Value == null) + throw new ArgumentNullException(nameof(fileCount), "Property is not nullable for class UploadFiles200Response."); + + if (message.IsSet && message.Value == null) + throw new ArgumentNullException(nameof(message), "Property is not nullable for class UploadFiles200Response."); + + return new UploadFiles200Response(fileCount, message); + } + + /// + /// Serializes a + /// + /// + /// + /// + /// + public override void Write(Utf8JsonWriter writer, UploadFiles200Response uploadFiles200Response, JsonSerializerOptions jsonSerializerOptions) + { + writer.WriteStartObject(); + + WriteProperties(writer, uploadFiles200Response, jsonSerializerOptions); + writer.WriteEndObject(); + } + + /// + /// Serializes the properties of + /// + /// + /// + /// + /// + public void WriteProperties(Utf8JsonWriter writer, UploadFiles200Response uploadFiles200Response, JsonSerializerOptions jsonSerializerOptions) + { + if (uploadFiles200Response.MessageOption.IsSet && uploadFiles200Response.Message == null) + throw new ArgumentNullException(nameof(uploadFiles200Response.Message), "Property is required for class UploadFiles200Response."); + + if (uploadFiles200Response.FileCountOption.IsSet) + writer.WriteNumber("fileCount", uploadFiles200Response.FileCountOption.Value.Value); + + if (uploadFiles200Response.MessageOption.IsSet) + writer.WriteString("message", uploadFiles200Response.Message); + } + } +} diff --git a/samples/client/petstore/csharp/generichost/net4.7/FormModels/src/Org.OpenAPITools/README.md b/samples/client/petstore/csharp/generichost/net4.7/FormModels/src/Org.OpenAPITools/README.md index 80f8c6bea340..c4d7b255ae76 100644 --- a/samples/client/petstore/csharp/generichost/net4.7/FormModels/src/Org.OpenAPITools/README.md +++ b/samples/client/petstore/csharp/generichost/net4.7/FormModels/src/Org.OpenAPITools/README.md @@ -115,5 +115,5 @@ namespace YourProject This C# SDK is automatically generated by the [OpenAPI Generator](https://openapi-generator.tech) project. - SDK version: 1.0.0 -- Generator version: 7.14.0-SNAPSHOT +- Generator version: 7.14.0 - Build package: org.openapitools.codegen.languages.CSharpClientCodegen diff --git a/samples/client/petstore/csharp/generichost/net4.7/OneOf/.openapi-generator/VERSION b/samples/client/petstore/csharp/generichost/net4.7/OneOf/.openapi-generator/VERSION index 4c631cf217a2..e465da43155f 100644 --- a/samples/client/petstore/csharp/generichost/net4.7/OneOf/.openapi-generator/VERSION +++ b/samples/client/petstore/csharp/generichost/net4.7/OneOf/.openapi-generator/VERSION @@ -1 +1 @@ -7.14.0-SNAPSHOT +7.14.0 diff --git a/samples/client/petstore/csharp/generichost/net4.7/OneOf/src/Org.OpenAPITools/README.md b/samples/client/petstore/csharp/generichost/net4.7/OneOf/src/Org.OpenAPITools/README.md index ce81d07fae93..b8f7bdef3fd6 100644 --- a/samples/client/petstore/csharp/generichost/net4.7/OneOf/src/Org.OpenAPITools/README.md +++ b/samples/client/petstore/csharp/generichost/net4.7/OneOf/src/Org.OpenAPITools/README.md @@ -107,5 +107,5 @@ namespace YourProject This C# SDK is automatically generated by the [OpenAPI Generator](https://openapi-generator.tech) project. - SDK version: 1.0.0 -- Generator version: 7.14.0-SNAPSHOT +- Generator version: 7.14.0 - Build package: org.openapitools.codegen.languages.CSharpClientCodegen diff --git a/samples/client/petstore/csharp/generichost/net4.7/Petstore/.openapi-generator/FILES b/samples/client/petstore/csharp/generichost/net4.7/Petstore/.openapi-generator/FILES index a6635c9d8351..d6f015766350 100644 --- a/samples/client/petstore/csharp/generichost/net4.7/Petstore/.openapi-generator/FILES +++ b/samples/client/petstore/csharp/generichost/net4.7/Petstore/.openapi-generator/FILES @@ -108,6 +108,7 @@ docs/models/TestResult.md docs/models/TestResultCode.md docs/models/Triangle.md docs/models/TriangleInterface.md +docs/models/UploadFiles200Response.md docs/models/User.md docs/models/Whale.md docs/models/Zebra.md @@ -116,6 +117,7 @@ docs/models/ZeroBasedEnumClass.md docs/scripts/git_push.ps1 docs/scripts/git_push.sh src/Org.OpenAPITools.Test/Api/DependencyInjectionTests.cs +src/Org.OpenAPITools.Test/Model/UploadFiles200ResponseTests.cs src/Org.OpenAPITools.Test/Org.OpenAPITools.Test.csproj src/Org.OpenAPITools.Test/README.md src/Org.OpenAPITools/Api/AnotherFakeApi.cs @@ -249,6 +251,7 @@ src/Org.OpenAPITools/Model/TestResult.cs src/Org.OpenAPITools/Model/TestResultCode.cs src/Org.OpenAPITools/Model/Triangle.cs src/Org.OpenAPITools/Model/TriangleInterface.cs +src/Org.OpenAPITools/Model/UploadFiles200Response.cs src/Org.OpenAPITools/Model/User.cs src/Org.OpenAPITools/Model/Whale.cs src/Org.OpenAPITools/Model/Zebra.cs diff --git a/samples/client/petstore/csharp/generichost/net4.7/Petstore/.openapi-generator/VERSION b/samples/client/petstore/csharp/generichost/net4.7/Petstore/.openapi-generator/VERSION index 4c631cf217a2..e465da43155f 100644 --- a/samples/client/petstore/csharp/generichost/net4.7/Petstore/.openapi-generator/VERSION +++ b/samples/client/petstore/csharp/generichost/net4.7/Petstore/.openapi-generator/VERSION @@ -1 +1 @@ -7.14.0-SNAPSHOT +7.14.0 diff --git a/samples/client/petstore/csharp/generichost/net4.7/Petstore/api/openapi.yaml b/samples/client/petstore/csharp/generichost/net4.7/Petstore/api/openapi.yaml index d86a1d2f6d87..276850a46bc1 100644 --- a/samples/client/petstore/csharp/generichost/net4.7/Petstore/api/openapi.yaml +++ b/samples/client/petstore/csharp/generichost/net4.7/Petstore/api/openapi.yaml @@ -41,6 +41,23 @@ tags: - description: Operations about user name: user paths: + /upload: + post: + operationId: uploadFiles + requestBody: + content: + multipart/form-data: + schema: + $ref: "#/components/schemas/uploadFiles_request" + required: true + responses: + "200": + content: + application/json: + schema: + $ref: "#/components/schemas/uploadFiles_200_response" + description: Files uploaded successfully + summary: Upload multiple files /roles/report: get: responses: @@ -2865,6 +2882,26 @@ components: - APPROVED - MANUAL_APPROVAL_REQUIRED type: string + uploadFiles_request: + properties: + files: + items: + format: binary + type: string + type: array + required: + - files + type: object + uploadFiles_200_response: + example: + message: message + fileCount: 0 + properties: + message: + type: string + fileCount: + type: integer + type: object _foo_get_default_response: example: string: diff --git a/samples/client/petstore/csharp/generichost/net4.7/Petstore/docs/apis/DefaultApi.md b/samples/client/petstore/csharp/generichost/net4.7/Petstore/docs/apis/DefaultApi.md index e97541b8b6a5..0fa36d06dcaf 100644 --- a/samples/client/petstore/csharp/generichost/net4.7/Petstore/docs/apis/DefaultApi.md +++ b/samples/client/petstore/csharp/generichost/net4.7/Petstore/docs/apis/DefaultApi.md @@ -9,6 +9,7 @@ All URIs are relative to *http://petstore.swagger.io:80/v2* | [**Hello**](DefaultApi.md#hello) | **GET** /hello | Hello | | [**RolesReportGet**](DefaultApi.md#rolesreportget) | **GET** /roles/report | | | [**Test**](DefaultApi.md#test) | **GET** /test | Retrieve an existing Notificationtest's Elements | +| [**UploadFiles**](DefaultApi.md#uploadfiles) | **POST** /upload | Upload multiple files | # **FooGet** @@ -166,3 +167,37 @@ No authorization required [[Back to top]](#) [[Back to API list]](../../README.md#documentation-for-api-endpoints) [[Back to Model list]](../../README.md#documentation-for-models) [[Back to README]](../../README.md) + +# **UploadFiles** +> UploadFiles200Response UploadFiles (List files) + +Upload multiple files + + +### Parameters + +| Name | Type | Description | Notes | +|------|------|-------------|-------| +| **files** | **List<System.IO.Stream>** | | | + +### Return type + +[**UploadFiles200Response**](UploadFiles200Response.md) + +### Authorization + +No authorization required + +### HTTP request headers + + - **Content-Type**: multipart/form-data + - **Accept**: application/json + + +### HTTP response details +| Status code | Description | Response headers | +|-------------|-------------|------------------| +| **200** | Files uploaded successfully | - | + +[[Back to top]](#) [[Back to API list]](../../README.md#documentation-for-api-endpoints) [[Back to Model list]](../../README.md#documentation-for-models) [[Back to README]](../../README.md) + diff --git a/samples/client/petstore/csharp/generichost/net4.7/Petstore/docs/models/UploadFiles200Response.md b/samples/client/petstore/csharp/generichost/net4.7/Petstore/docs/models/UploadFiles200Response.md new file mode 100644 index 000000000000..8e32fc151b34 --- /dev/null +++ b/samples/client/petstore/csharp/generichost/net4.7/Petstore/docs/models/UploadFiles200Response.md @@ -0,0 +1,11 @@ +# Org.OpenAPITools.Model.UploadFiles200Response + +## Properties + +Name | Type | Description | Notes +------------ | ------------- | ------------- | ------------- +**FileCount** | **int** | | [optional] +**Message** | **string** | | [optional] + +[[Back to Model list]](../../README.md#documentation-for-models) [[Back to API list]](../../README.md#documentation-for-api-endpoints) [[Back to README]](../../README.md) + diff --git a/samples/client/petstore/csharp/generichost/net4.7/Petstore/src/Org.OpenAPITools.Test/Model/UploadFiles200ResponseTests.cs b/samples/client/petstore/csharp/generichost/net4.7/Petstore/src/Org.OpenAPITools.Test/Model/UploadFiles200ResponseTests.cs new file mode 100644 index 000000000000..e6003ac29cfe --- /dev/null +++ b/samples/client/petstore/csharp/generichost/net4.7/Petstore/src/Org.OpenAPITools.Test/Model/UploadFiles200ResponseTests.cs @@ -0,0 +1,74 @@ +/* + * OpenAPI Petstore + * + * This spec is mainly for testing Petstore server and contains fake endpoints, models. Please do not use this for any other purpose. Special characters: \" \\ + * + * The version of the OpenAPI document: 1.0.0 + * Generated by: https://github.com/openapitools/openapi-generator.git + */ + + +using Xunit; + +using System; +using System.Linq; +using System.IO; +using System.Collections.Generic; +using Org.OpenAPITools.Model; +using Org.OpenAPITools.Client; +using System.Reflection; + +namespace Org.OpenAPITools.Test.Model +{ + /// + /// Class for testing UploadFiles200Response + /// + /// + /// This file is automatically generated by OpenAPI Generator (https://openapi-generator.tech). + /// Please update the test case below to test the model. + /// + public class UploadFiles200ResponseTests : IDisposable + { + // TODO uncomment below to declare an instance variable for UploadFiles200Response + //private UploadFiles200Response instance; + + public UploadFiles200ResponseTests() + { + // TODO uncomment below to create an instance of UploadFiles200Response + //instance = new UploadFiles200Response(); + } + + public void Dispose() + { + // Cleanup when everything is done. + } + + /// + /// Test an instance of UploadFiles200Response + /// + [Fact] + public void UploadFiles200ResponseInstanceTest() + { + // TODO uncomment below to test "IsType" UploadFiles200Response + //Assert.IsType(instance); + } + + /// + /// Test the property 'FileCount' + /// + [Fact] + public void FileCountTest() + { + // TODO unit test for the property 'FileCount' + } + + /// + /// Test the property 'Message' + /// + [Fact] + public void MessageTest() + { + // TODO unit test for the property 'Message' + } + } +} diff --git a/samples/client/petstore/csharp/generichost/net4.7/Petstore/src/Org.OpenAPITools/Api/DefaultApi.cs b/samples/client/petstore/csharp/generichost/net4.7/Petstore/src/Org.OpenAPITools/Api/DefaultApi.cs index d58c2e585a05..71bf74039ae8 100644 --- a/samples/client/petstore/csharp/generichost/net4.7/Petstore/src/Org.OpenAPITools/Api/DefaultApi.cs +++ b/samples/client/petstore/csharp/generichost/net4.7/Petstore/src/Org.OpenAPITools/Api/DefaultApi.cs @@ -139,6 +139,29 @@ public interface IDefaultApi : IApi /// Cancellation Token to cancel the request. /// <> Task TestOrDefaultAsync(System.Threading.CancellationToken cancellationToken = default); + + /// + /// Upload multiple files + /// + /// + /// + /// + /// Thrown when fails to make API call + /// + /// Cancellation Token to cancel the request. + /// <> + Task UploadFilesAsync(List files, System.Threading.CancellationToken cancellationToken = default); + + /// + /// Upload multiple files + /// + /// + /// + /// + /// + /// Cancellation Token to cancel the request. + /// <> + Task UploadFilesOrDefaultAsync(List files, System.Threading.CancellationToken cancellationToken = default); } /// @@ -201,6 +224,18 @@ public interface ITestApiResponse : Org.OpenAPITools.Client.IApiResponse, IOk + /// The + /// + public interface IUploadFilesApiResponse : Org.OpenAPITools.Client.IApiResponse, IOk + { + /// + /// Returns true if the response is 200 Ok + /// + /// + bool IsOk { get; } + } + /// /// Represents a collection of functions to interact with the API endpoints /// @@ -305,6 +340,26 @@ internal void ExecuteOnErrorTest(Exception exception) { OnErrorTest?.Invoke(this, new ExceptionEventArgs(exception)); } + + /// + /// The event raised after the server response + /// + public event EventHandler OnUploadFiles; + + /// + /// The event raised after an error querying the server + /// + public event EventHandler OnErrorUploadFiles; + + internal void ExecuteOnUploadFiles(DefaultApi.UploadFilesApiResponse apiResponse) + { + OnUploadFiles?.Invoke(this, new ApiResponseEventArgs(apiResponse)); + } + + internal void ExecuteOnErrorUploadFiles(Exception exception) + { + OnErrorUploadFiles?.Invoke(this, new ExceptionEventArgs(exception)); + } } /// @@ -1358,5 +1413,251 @@ private void OnDeserializationErrorDefaultImplementation(Exception exception, Ht partial void OnDeserializationError(ref bool suppressDefaultLog, Exception exception, HttpStatusCode httpStatusCode); } + + partial void FormatUploadFiles(List files); + + /// + /// Validates the request parameters + /// + /// + /// + private void ValidateUploadFiles(List files) + { + if (files == null) + throw new ArgumentNullException(nameof(files)); + } + + /// + /// Processes the server response + /// + /// + /// + private void AfterUploadFilesDefaultImplementation(IUploadFilesApiResponse apiResponseLocalVar, List files) + { + bool suppressDefaultLog = false; + AfterUploadFiles(ref suppressDefaultLog, apiResponseLocalVar, files); + if (!suppressDefaultLog) + Logger.LogInformation("{0,-9} | {1} | {3}", (apiResponseLocalVar.DownloadedAt - apiResponseLocalVar.RequestedAt).TotalSeconds, apiResponseLocalVar.StatusCode, apiResponseLocalVar.Path); + } + + /// + /// Processes the server response + /// + /// + /// + /// + partial void AfterUploadFiles(ref bool suppressDefaultLog, IUploadFilesApiResponse apiResponseLocalVar, List files); + + /// + /// Logs exceptions that occur while retrieving the server response + /// + /// + /// + /// + /// + private void OnErrorUploadFilesDefaultImplementation(Exception exceptionLocalVar, string pathFormatLocalVar, string pathLocalVar, List files) + { + bool suppressDefaultLogLocalVar = false; + OnErrorUploadFiles(ref suppressDefaultLogLocalVar, exceptionLocalVar, pathFormatLocalVar, pathLocalVar, files); + if (!suppressDefaultLogLocalVar) + Logger.LogError(exceptionLocalVar, "An error occurred while sending the request to the server."); + } + + /// + /// A partial method that gives developers a way to provide customized exception handling + /// + /// + /// + /// + /// + /// + partial void OnErrorUploadFiles(ref bool suppressDefaultLogLocalVar, Exception exceptionLocalVar, string pathFormatLocalVar, string pathLocalVar, List files); + + /// + /// Upload multiple files + /// + /// + /// Cancellation Token to cancel the request. + /// <> + public async Task UploadFilesOrDefaultAsync(List files, System.Threading.CancellationToken cancellationToken = default) + { + try + { + return await UploadFilesAsync(files, cancellationToken).ConfigureAwait(false); + } + catch (Exception) + { + return null; + } + } + + /// + /// Upload multiple files + /// + /// Thrown when fails to make API call + /// + /// Cancellation Token to cancel the request. + /// <> + public async Task UploadFilesAsync(List files, System.Threading.CancellationToken cancellationToken = default) + { + UriBuilder uriBuilderLocalVar = new UriBuilder(); + + try + { + ValidateUploadFiles(files); + + FormatUploadFiles(files); + + using (HttpRequestMessage httpRequestMessageLocalVar = new HttpRequestMessage()) + { + uriBuilderLocalVar.Host = HttpClient.BaseAddress.Host; + uriBuilderLocalVar.Port = HttpClient.BaseAddress.Port; + uriBuilderLocalVar.Scheme = HttpClient.BaseAddress.Scheme; + uriBuilderLocalVar.Path = HttpClient.BaseAddress.AbsolutePath == "/" + ? "/upload" + : string.Concat(HttpClient.BaseAddress.AbsolutePath, "/upload"); + + MultipartContent multipartContentLocalVar = new MultipartContent(); + + httpRequestMessageLocalVar.Content = multipartContentLocalVar; + + List> formParameterLocalVars = new List>(); + + multipartContentLocalVar.Add(new FormUrlEncodedContent(formParameterLocalVars)); + + foreach (global::System.IO.Stream streamLocalVar in files) + { + 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); + } + + httpRequestMessageLocalVar.RequestUri = uriBuilderLocalVar.Uri; + + string[] contentTypes = new string[] { + "multipart/form-data" + }; + + string contentTypeLocalVar = ClientUtils.SelectHeaderContentType(contentTypes); + + if (contentTypeLocalVar != null && httpRequestMessageLocalVar.Content != null) + httpRequestMessageLocalVar.Content.Headers.ContentType = new MediaTypeHeaderValue(contentTypeLocalVar); + + string[] acceptLocalVars = new string[] { + "application/json" + }; + + string acceptLocalVar = ClientUtils.SelectHeaderAccept(acceptLocalVars); + + if (acceptLocalVar != null) + httpRequestMessageLocalVar.Headers.Accept.Add(new MediaTypeWithQualityHeaderValue(acceptLocalVar)); + httpRequestMessageLocalVar.Method = new HttpMethod("POST"); + + DateTime requestedAtLocalVar = DateTime.UtcNow; + + using (HttpResponseMessage httpResponseMessageLocalVar = await HttpClient.SendAsync(httpRequestMessageLocalVar, cancellationToken).ConfigureAwait(false)) + { + string responseContentLocalVar = await httpResponseMessageLocalVar.Content.ReadAsStringAsync().ConfigureAwait(false); + + ILogger apiResponseLoggerLocalVar = LoggerFactory.CreateLogger(); + + UploadFilesApiResponse apiResponseLocalVar = new UploadFilesApiResponse(apiResponseLoggerLocalVar, httpRequestMessageLocalVar, httpResponseMessageLocalVar, responseContentLocalVar, "/upload", requestedAtLocalVar, _jsonSerializerOptions); + + AfterUploadFilesDefaultImplementation(apiResponseLocalVar, files); + + Events.ExecuteOnUploadFiles(apiResponseLocalVar); + + return apiResponseLocalVar; + } + } + } + catch(Exception e) + { + OnErrorUploadFilesDefaultImplementation(e, "/upload", uriBuilderLocalVar.Path, files); + Events.ExecuteOnErrorUploadFiles(e); + throw; + } + } + + /// + /// The + /// + public partial class UploadFilesApiResponse : Org.OpenAPITools.Client.ApiResponse, IUploadFilesApiResponse + { + /// + /// The logger + /// + public ILogger Logger { get; } + + /// + /// The + /// + /// + /// + /// + /// + /// + /// + /// + public UploadFilesApiResponse(ILogger logger, System.Net.Http.HttpRequestMessage httpRequestMessage, System.Net.Http.HttpResponseMessage httpResponseMessage, string rawContent, string path, DateTime requestedAt, System.Text.Json.JsonSerializerOptions jsonSerializerOptions) : base(httpRequestMessage, httpResponseMessage, rawContent, path, requestedAt, jsonSerializerOptions) + { + Logger = logger; + OnCreated(httpRequestMessage, httpResponseMessage); + } + + partial void OnCreated(global::System.Net.Http.HttpRequestMessage httpRequestMessage, System.Net.Http.HttpResponseMessage httpResponseMessage); + + /// + /// Returns true if the response is 200 Ok + /// + /// + public bool IsOk => 200 == (int)StatusCode; + + /// + /// Deserializes the response if the response is 200 Ok + /// + /// + public Org.OpenAPITools.Model.UploadFiles200Response Ok() + { + // This logic may be modified with the AsModel.mustache template + return IsOk + ? System.Text.Json.JsonSerializer.Deserialize(RawContent, _jsonSerializerOptions) + : default; + } + + /// + /// Returns true if the response is 200 Ok and the deserialized response is not null + /// + /// + /// + public bool TryOk(out Org.OpenAPITools.Model.UploadFiles200Response result) + { + result = null; + + try + { + result = Ok(); + } catch (Exception e) + { + OnDeserializationErrorDefaultImplementation(e, (HttpStatusCode)200); + } + + return result != null; + } + + private void OnDeserializationErrorDefaultImplementation(Exception exception, HttpStatusCode httpStatusCode) + { + bool suppressDefaultLog = false; + OnDeserializationError(ref suppressDefaultLog, exception, httpStatusCode); + if (!suppressDefaultLog) + Logger.LogError(exception, "An error occurred while deserializing the {code} response.", httpStatusCode); + } + + partial void OnDeserializationError(ref bool suppressDefaultLog, Exception exception, HttpStatusCode httpStatusCode); + } } } diff --git a/samples/client/petstore/csharp/generichost/net4.7/Petstore/src/Org.OpenAPITools/Api/FakeApi.cs b/samples/client/petstore/csharp/generichost/net4.7/Petstore/src/Org.OpenAPITools/Api/FakeApi.cs index b5bd0071572b..20ad985082fe 100644 --- a/samples/client/petstore/csharp/generichost/net4.7/Petstore/src/Org.OpenAPITools/Api/FakeApi.cs +++ b/samples/client/petstore/csharp/generichost/net4.7/Petstore/src/Org.OpenAPITools/Api/FakeApi.cs @@ -4024,7 +4024,6 @@ public async Task TestEndpointParametersAsyn if (binary.IsSet) multipartContentLocalVar.Add(new StreamContent(binary.Value)); - if (callback.IsSet) formParameterLocalVars.Add(new KeyValuePair("callback", ClientUtils.ParameterToString(callback.Value))); @@ -4346,7 +4345,9 @@ public async Task TestEnumParametersAsync(Option List> formParameterLocalVars = new List>(); - multipartContentLocalVar.Add(new FormUrlEncodedContent(formParameterLocalVars)); if (enumFormString.IsSet) + multipartContentLocalVar.Add(new FormUrlEncodedContent(formParameterLocalVars)); + + if (enumFormString.IsSet) formParameterLocalVars.Add(new KeyValuePair("enum_form_string", ClientUtils.ParameterToString(enumFormString.Value))); if (enumFormStringArray.IsSet) diff --git a/samples/client/petstore/csharp/generichost/net4.7/Petstore/src/Org.OpenAPITools/Api/PetApi.cs b/samples/client/petstore/csharp/generichost/net4.7/Petstore/src/Org.OpenAPITools/Api/PetApi.cs index e6b74ca5d574..b83decd72785 100644 --- a/samples/client/petstore/csharp/generichost/net4.7/Petstore/src/Org.OpenAPITools/Api/PetApi.cs +++ b/samples/client/petstore/csharp/generichost/net4.7/Petstore/src/Org.OpenAPITools/Api/PetApi.cs @@ -2198,7 +2198,9 @@ public async Task UpdatePetWithFormAsync(long pet List> formParameterLocalVars = new List>(); - multipartContentLocalVar.Add(new FormUrlEncodedContent(formParameterLocalVars)); if (name.IsSet) + multipartContentLocalVar.Add(new FormUrlEncodedContent(formParameterLocalVars)); + + if (name.IsSet) formParameterLocalVars.Add(new KeyValuePair("name", ClientUtils.ParameterToString(name.Value))); if (status.IsSet) @@ -2425,12 +2427,13 @@ public async Task UploadFileAsync(long petId, Option> formParameterLocalVars = new List>(); - multipartContentLocalVar.Add(new FormUrlEncodedContent(formParameterLocalVars)); if (additionalMetadata.IsSet) + multipartContentLocalVar.Add(new FormUrlEncodedContent(formParameterLocalVars)); + + if (additionalMetadata.IsSet) formParameterLocalVars.Add(new KeyValuePair("additionalMetadata", ClientUtils.ParameterToString(additionalMetadata.Value))); if (file.IsSet) multipartContentLocalVar.Add(new StreamContent(file.Value)); - List tokenBaseLocalVars = new List(); httpRequestMessageLocalVar.RequestUri = uriBuilderLocalVar.Uri; @@ -2692,7 +2695,9 @@ public async Task UploadFileWithRequired List> formParameterLocalVars = new List>(); - multipartContentLocalVar.Add(new FormUrlEncodedContent(formParameterLocalVars)); multipartContentLocalVar.Add(new StreamContent(requiredFile)); + multipartContentLocalVar.Add(new FormUrlEncodedContent(formParameterLocalVars)); + + multipartContentLocalVar.Add(new StreamContent(requiredFile)); if (additionalMetadata.IsSet) formParameterLocalVars.Add(new KeyValuePair("additionalMetadata", ClientUtils.ParameterToString(additionalMetadata.Value))); diff --git a/samples/client/petstore/csharp/generichost/net4.7/Petstore/src/Org.OpenAPITools/Client/HostConfiguration.cs b/samples/client/petstore/csharp/generichost/net4.7/Petstore/src/Org.OpenAPITools/Client/HostConfiguration.cs index 5d658ec3769d..3196d6c9131b 100644 --- a/samples/client/petstore/csharp/generichost/net4.7/Petstore/src/Org.OpenAPITools/Client/HostConfiguration.cs +++ b/samples/client/petstore/csharp/generichost/net4.7/Petstore/src/Org.OpenAPITools/Client/HostConfiguration.cs @@ -144,6 +144,7 @@ public HostConfiguration(IServiceCollection services) _jsonOptions.Converters.Add(new TestResultCodeNullableJsonConverter()); _jsonOptions.Converters.Add(new TriangleJsonConverter()); _jsonOptions.Converters.Add(new TriangleInterfaceJsonConverter()); + _jsonOptions.Converters.Add(new UploadFiles200ResponseJsonConverter()); _jsonOptions.Converters.Add(new UserJsonConverter()); _jsonOptions.Converters.Add(new WhaleJsonConverter()); _jsonOptions.Converters.Add(new ZebraJsonConverter()); diff --git a/samples/client/petstore/csharp/generichost/net4.7/Petstore/src/Org.OpenAPITools/Model/UploadFiles200Response.cs b/samples/client/petstore/csharp/generichost/net4.7/Petstore/src/Org.OpenAPITools/Model/UploadFiles200Response.cs new file mode 100644 index 000000000000..9166257e1cbe --- /dev/null +++ b/samples/client/petstore/csharp/generichost/net4.7/Petstore/src/Org.OpenAPITools/Model/UploadFiles200Response.cs @@ -0,0 +1,200 @@ +// +/* + * OpenAPI Petstore + * + * This spec is mainly for testing Petstore server and contains fake endpoints, models. Please do not use this for any other purpose. Special characters: \" \\ + * + * The version of the OpenAPI document: 1.0.0 + * Generated by: https://github.com/openapitools/openapi-generator.git + */ + +using System; +using System.Collections; +using System.Collections.Generic; +using System.Collections.ObjectModel; +using System.Linq; +using System.IO; +using System.Text; +using System.Text.RegularExpressions; +using System.Text.Json; +using System.Text.Json.Serialization; +using System.ComponentModel.DataAnnotations; +using OpenAPIClientUtils = Org.OpenAPITools.Client.ClientUtils; +using Org.OpenAPITools.Client; + +namespace Org.OpenAPITools.Model +{ + /// + /// UploadFiles200Response + /// + public partial class UploadFiles200Response : IValidatableObject + { + /// + /// Initializes a new instance of the class. + /// + /// fileCount + /// message + [JsonConstructor] + public UploadFiles200Response(Option fileCount = default, Option message = default) + { + FileCountOption = fileCount; + MessageOption = message; + OnCreated(); + } + + partial void OnCreated(); + + /// + /// Used to track the state of FileCount + /// + [JsonIgnore] + [global::System.ComponentModel.EditorBrowsable(global::System.ComponentModel.EditorBrowsableState.Never)] + public Option FileCountOption { get; private set; } + + /// + /// Gets or Sets FileCount + /// + [JsonPropertyName("fileCount")] + public int? FileCount { get { return this.FileCountOption; } set { this.FileCountOption = new Option(value); } } + + /// + /// Used to track the state of Message + /// + [JsonIgnore] + [global::System.ComponentModel.EditorBrowsable(global::System.ComponentModel.EditorBrowsableState.Never)] + public Option MessageOption { get; private set; } + + /// + /// Gets or Sets Message + /// + [JsonPropertyName("message")] + public string Message { get { return this.MessageOption; } set { this.MessageOption = new Option(value); } } + + /// + /// Gets or Sets additional properties + /// + [JsonExtensionData] + public Dictionary AdditionalProperties { get; } = new Dictionary(); + + /// + /// Returns the string presentation of the object + /// + /// String presentation of the object + public override string ToString() + { + StringBuilder sb = new StringBuilder(); + sb.Append("class UploadFiles200Response {\n"); + sb.Append(" FileCount: ").Append(FileCount).Append("\n"); + sb.Append(" Message: ").Append(Message).Append("\n"); + sb.Append(" AdditionalProperties: ").Append(AdditionalProperties).Append("\n"); + sb.Append("}\n"); + return sb.ToString(); + } + + /// + /// To validate all properties of the instance + /// + /// Validation context + /// Validation Result + IEnumerable IValidatableObject.Validate(ValidationContext validationContext) + { + yield break; + } + } + + /// + /// A Json converter for type + /// + public class UploadFiles200ResponseJsonConverter : JsonConverter + { + /// + /// Deserializes json to + /// + /// + /// + /// + /// + /// + public override UploadFiles200Response Read(ref Utf8JsonReader utf8JsonReader, Type typeToConvert, JsonSerializerOptions jsonSerializerOptions) + { + int currentDepth = utf8JsonReader.CurrentDepth; + + if (utf8JsonReader.TokenType != JsonTokenType.StartObject && utf8JsonReader.TokenType != JsonTokenType.StartArray) + throw new JsonException(); + + JsonTokenType startingTokenType = utf8JsonReader.TokenType; + + Option fileCount = default; + Option message = default; + + while (utf8JsonReader.Read()) + { + if (startingTokenType == JsonTokenType.StartObject && utf8JsonReader.TokenType == JsonTokenType.EndObject && currentDepth == utf8JsonReader.CurrentDepth) + break; + + if (startingTokenType == JsonTokenType.StartArray && utf8JsonReader.TokenType == JsonTokenType.EndArray && currentDepth == utf8JsonReader.CurrentDepth) + break; + + if (utf8JsonReader.TokenType == JsonTokenType.PropertyName && currentDepth == utf8JsonReader.CurrentDepth - 1) + { + string localVarJsonPropertyName = utf8JsonReader.GetString(); + utf8JsonReader.Read(); + + switch (localVarJsonPropertyName) + { + case "fileCount": + fileCount = new Option(utf8JsonReader.TokenType == JsonTokenType.Null ? (int?)null : utf8JsonReader.GetInt32()); + break; + case "message": + message = new Option(utf8JsonReader.GetString()); + break; + default: + break; + } + } + } + + if (fileCount.IsSet && fileCount.Value == null) + throw new ArgumentNullException(nameof(fileCount), "Property is not nullable for class UploadFiles200Response."); + + if (message.IsSet && message.Value == null) + throw new ArgumentNullException(nameof(message), "Property is not nullable for class UploadFiles200Response."); + + return new UploadFiles200Response(fileCount, message); + } + + /// + /// Serializes a + /// + /// + /// + /// + /// + public override void Write(Utf8JsonWriter writer, UploadFiles200Response uploadFiles200Response, JsonSerializerOptions jsonSerializerOptions) + { + writer.WriteStartObject(); + + WriteProperties(writer, uploadFiles200Response, jsonSerializerOptions); + writer.WriteEndObject(); + } + + /// + /// Serializes the properties of + /// + /// + /// + /// + /// + public void WriteProperties(Utf8JsonWriter writer, UploadFiles200Response uploadFiles200Response, JsonSerializerOptions jsonSerializerOptions) + { + if (uploadFiles200Response.MessageOption.IsSet && uploadFiles200Response.Message == null) + throw new ArgumentNullException(nameof(uploadFiles200Response.Message), "Property is required for class UploadFiles200Response."); + + if (uploadFiles200Response.FileCountOption.IsSet) + writer.WriteNumber("fileCount", uploadFiles200Response.FileCountOption.Value.Value); + + if (uploadFiles200Response.MessageOption.IsSet) + writer.WriteString("message", uploadFiles200Response.Message); + } + } +} diff --git a/samples/client/petstore/csharp/generichost/net4.7/Petstore/src/Org.OpenAPITools/README.md b/samples/client/petstore/csharp/generichost/net4.7/Petstore/src/Org.OpenAPITools/README.md index 80f8c6bea340..c4d7b255ae76 100644 --- a/samples/client/petstore/csharp/generichost/net4.7/Petstore/src/Org.OpenAPITools/README.md +++ b/samples/client/petstore/csharp/generichost/net4.7/Petstore/src/Org.OpenAPITools/README.md @@ -115,5 +115,5 @@ namespace YourProject This C# SDK is automatically generated by the [OpenAPI Generator](https://openapi-generator.tech) project. - SDK version: 1.0.0 -- Generator version: 7.14.0-SNAPSHOT +- Generator version: 7.14.0 - Build package: org.openapitools.codegen.languages.CSharpClientCodegen diff --git a/samples/client/petstore/csharp/generichost/net4.7/UseDateTimeForDate/.openapi-generator/VERSION b/samples/client/petstore/csharp/generichost/net4.7/UseDateTimeForDate/.openapi-generator/VERSION index 4c631cf217a2..e465da43155f 100644 --- a/samples/client/petstore/csharp/generichost/net4.7/UseDateTimeForDate/.openapi-generator/VERSION +++ b/samples/client/petstore/csharp/generichost/net4.7/UseDateTimeForDate/.openapi-generator/VERSION @@ -1 +1 @@ -7.14.0-SNAPSHOT +7.14.0 diff --git a/samples/client/petstore/csharp/generichost/net4.7/UseDateTimeForDate/src/Org.OpenAPITools/README.md b/samples/client/petstore/csharp/generichost/net4.7/UseDateTimeForDate/src/Org.OpenAPITools/README.md index a0d8c3bbdab1..a143d752060f 100644 --- a/samples/client/petstore/csharp/generichost/net4.7/UseDateTimeForDate/src/Org.OpenAPITools/README.md +++ b/samples/client/petstore/csharp/generichost/net4.7/UseDateTimeForDate/src/Org.OpenAPITools/README.md @@ -107,5 +107,5 @@ namespace YourProject This C# SDK is automatically generated by the [OpenAPI Generator](https://openapi-generator.tech) project. - SDK version: 1.0.0 -- Generator version: 7.14.0-SNAPSHOT +- Generator version: 7.14.0 - Build package: org.openapitools.codegen.languages.CSharpClientCodegen diff --git a/samples/client/petstore/csharp/generichost/net4.8/AllOf/.openapi-generator/VERSION b/samples/client/petstore/csharp/generichost/net4.8/AllOf/.openapi-generator/VERSION index 4c631cf217a2..e465da43155f 100644 --- a/samples/client/petstore/csharp/generichost/net4.8/AllOf/.openapi-generator/VERSION +++ b/samples/client/petstore/csharp/generichost/net4.8/AllOf/.openapi-generator/VERSION @@ -1 +1 @@ -7.14.0-SNAPSHOT +7.14.0 diff --git a/samples/client/petstore/csharp/generichost/net4.8/AllOf/src/Org.OpenAPITools/README.md b/samples/client/petstore/csharp/generichost/net4.8/AllOf/src/Org.OpenAPITools/README.md index 1694c2c866ab..851ce0ecc85b 100644 --- a/samples/client/petstore/csharp/generichost/net4.8/AllOf/src/Org.OpenAPITools/README.md +++ b/samples/client/petstore/csharp/generichost/net4.8/AllOf/src/Org.OpenAPITools/README.md @@ -107,5 +107,5 @@ namespace YourProject This C# SDK is automatically generated by the [OpenAPI Generator](https://openapi-generator.tech) project. - SDK version: 1.0.0 -- Generator version: 7.14.0-SNAPSHOT +- Generator version: 7.14.0 - Build package: org.openapitools.codegen.languages.CSharpClientCodegen diff --git a/samples/client/petstore/csharp/generichost/net4.8/AnyOf/.openapi-generator/VERSION b/samples/client/petstore/csharp/generichost/net4.8/AnyOf/.openapi-generator/VERSION index 4c631cf217a2..e465da43155f 100644 --- a/samples/client/petstore/csharp/generichost/net4.8/AnyOf/.openapi-generator/VERSION +++ b/samples/client/petstore/csharp/generichost/net4.8/AnyOf/.openapi-generator/VERSION @@ -1 +1 @@ -7.14.0-SNAPSHOT +7.14.0 diff --git a/samples/client/petstore/csharp/generichost/net4.8/AnyOf/src/Org.OpenAPITools/README.md b/samples/client/petstore/csharp/generichost/net4.8/AnyOf/src/Org.OpenAPITools/README.md index 6300b93948ec..af72f63e4fad 100644 --- a/samples/client/petstore/csharp/generichost/net4.8/AnyOf/src/Org.OpenAPITools/README.md +++ b/samples/client/petstore/csharp/generichost/net4.8/AnyOf/src/Org.OpenAPITools/README.md @@ -107,5 +107,5 @@ namespace YourProject This C# SDK is automatically generated by the [OpenAPI Generator](https://openapi-generator.tech) project. - SDK version: 1.0.0 -- Generator version: 7.14.0-SNAPSHOT +- Generator version: 7.14.0 - Build package: org.openapitools.codegen.languages.CSharpClientCodegen diff --git a/samples/client/petstore/csharp/generichost/net4.8/AnyOfNoCompare/.openapi-generator/VERSION b/samples/client/petstore/csharp/generichost/net4.8/AnyOfNoCompare/.openapi-generator/VERSION index 4c631cf217a2..e465da43155f 100644 --- a/samples/client/petstore/csharp/generichost/net4.8/AnyOfNoCompare/.openapi-generator/VERSION +++ b/samples/client/petstore/csharp/generichost/net4.8/AnyOfNoCompare/.openapi-generator/VERSION @@ -1 +1 @@ -7.14.0-SNAPSHOT +7.14.0 diff --git a/samples/client/petstore/csharp/generichost/net4.8/AnyOfNoCompare/src/Org.OpenAPITools/README.md b/samples/client/petstore/csharp/generichost/net4.8/AnyOfNoCompare/src/Org.OpenAPITools/README.md index 6300b93948ec..af72f63e4fad 100644 --- a/samples/client/petstore/csharp/generichost/net4.8/AnyOfNoCompare/src/Org.OpenAPITools/README.md +++ b/samples/client/petstore/csharp/generichost/net4.8/AnyOfNoCompare/src/Org.OpenAPITools/README.md @@ -107,5 +107,5 @@ namespace YourProject This C# SDK is automatically generated by the [OpenAPI Generator](https://openapi-generator.tech) project. - SDK version: 1.0.0 -- Generator version: 7.14.0-SNAPSHOT +- Generator version: 7.14.0 - Build package: org.openapitools.codegen.languages.CSharpClientCodegen diff --git a/samples/client/petstore/csharp/generichost/net4.8/FormModels/.openapi-generator/FILES b/samples/client/petstore/csharp/generichost/net4.8/FormModels/.openapi-generator/FILES index 23707e233f05..6ac1f4e71539 100644 --- a/samples/client/petstore/csharp/generichost/net4.8/FormModels/.openapi-generator/FILES +++ b/samples/client/petstore/csharp/generichost/net4.8/FormModels/.openapi-generator/FILES @@ -130,6 +130,7 @@ docs/models/TestResult.md docs/models/TestResultCode.md docs/models/Triangle.md docs/models/TriangleInterface.md +docs/models/UploadFiles200Response.md docs/models/User.md docs/models/Whale.md docs/models/Zebra.md @@ -140,6 +141,7 @@ docs/models/ZeroBasedEnumClassZeroBasedEnum.md docs/scripts/git_push.ps1 docs/scripts/git_push.sh src/Org.OpenAPITools.Test/Api/DependencyInjectionTests.cs +src/Org.OpenAPITools.Test/Model/UploadFiles200ResponseTests.cs src/Org.OpenAPITools.Test/Org.OpenAPITools.Test.csproj src/Org.OpenAPITools.Test/README.md src/Org.OpenAPITools/Api/AnotherFakeApi.cs @@ -295,6 +297,7 @@ src/Org.OpenAPITools/Model/TestResult.cs src/Org.OpenAPITools/Model/TestResultCode.cs src/Org.OpenAPITools/Model/Triangle.cs src/Org.OpenAPITools/Model/TriangleInterface.cs +src/Org.OpenAPITools/Model/UploadFiles200Response.cs src/Org.OpenAPITools/Model/User.cs src/Org.OpenAPITools/Model/Whale.cs src/Org.OpenAPITools/Model/Zebra.cs diff --git a/samples/client/petstore/csharp/generichost/net4.8/FormModels/.openapi-generator/VERSION b/samples/client/petstore/csharp/generichost/net4.8/FormModels/.openapi-generator/VERSION index 4c631cf217a2..e465da43155f 100644 --- a/samples/client/petstore/csharp/generichost/net4.8/FormModels/.openapi-generator/VERSION +++ b/samples/client/petstore/csharp/generichost/net4.8/FormModels/.openapi-generator/VERSION @@ -1 +1 @@ -7.14.0-SNAPSHOT +7.14.0 diff --git a/samples/client/petstore/csharp/generichost/net4.8/FormModels/api/openapi.yaml b/samples/client/petstore/csharp/generichost/net4.8/FormModels/api/openapi.yaml index 3afd9359ab7d..4bd9bd7aa5fa 100644 --- a/samples/client/petstore/csharp/generichost/net4.8/FormModels/api/openapi.yaml +++ b/samples/client/petstore/csharp/generichost/net4.8/FormModels/api/openapi.yaml @@ -41,6 +41,23 @@ tags: - description: Operations about user name: user paths: + /upload: + post: + operationId: uploadFiles + requestBody: + content: + multipart/form-data: + schema: + $ref: "#/components/schemas/uploadFiles_request" + required: true + responses: + "200": + content: + application/json: + schema: + $ref: "#/components/schemas/uploadFiles_200_response" + description: Files uploaded successfully + summary: Upload multiple files /roles/report: get: responses: @@ -2684,6 +2701,26 @@ components: - APPROVED - MANUAL_APPROVAL_REQUIRED type: string + uploadFiles_request: + properties: + files: + items: + format: binary + type: string + type: array + required: + - files + type: object + uploadFiles_200_response: + example: + message: message + fileCount: 0 + properties: + message: + type: string + fileCount: + type: integer + type: object _foo_get_default_response: example: string: diff --git a/samples/client/petstore/csharp/generichost/net4.8/FormModels/docs/apis/DefaultApi.md b/samples/client/petstore/csharp/generichost/net4.8/FormModels/docs/apis/DefaultApi.md index e97541b8b6a5..0fa36d06dcaf 100644 --- a/samples/client/petstore/csharp/generichost/net4.8/FormModels/docs/apis/DefaultApi.md +++ b/samples/client/petstore/csharp/generichost/net4.8/FormModels/docs/apis/DefaultApi.md @@ -9,6 +9,7 @@ All URIs are relative to *http://petstore.swagger.io:80/v2* | [**Hello**](DefaultApi.md#hello) | **GET** /hello | Hello | | [**RolesReportGet**](DefaultApi.md#rolesreportget) | **GET** /roles/report | | | [**Test**](DefaultApi.md#test) | **GET** /test | Retrieve an existing Notificationtest's Elements | +| [**UploadFiles**](DefaultApi.md#uploadfiles) | **POST** /upload | Upload multiple files | # **FooGet** @@ -166,3 +167,37 @@ No authorization required [[Back to top]](#) [[Back to API list]](../../README.md#documentation-for-api-endpoints) [[Back to Model list]](../../README.md#documentation-for-models) [[Back to README]](../../README.md) + +# **UploadFiles** +> UploadFiles200Response UploadFiles (List files) + +Upload multiple files + + +### Parameters + +| Name | Type | Description | Notes | +|------|------|-------------|-------| +| **files** | **List<System.IO.Stream>** | | | + +### Return type + +[**UploadFiles200Response**](UploadFiles200Response.md) + +### Authorization + +No authorization required + +### HTTP request headers + + - **Content-Type**: multipart/form-data + - **Accept**: application/json + + +### HTTP response details +| Status code | Description | Response headers | +|-------------|-------------|------------------| +| **200** | Files uploaded successfully | - | + +[[Back to top]](#) [[Back to API list]](../../README.md#documentation-for-api-endpoints) [[Back to Model list]](../../README.md#documentation-for-models) [[Back to README]](../../README.md) + diff --git a/samples/client/petstore/csharp/generichost/net4.8/FormModels/docs/models/UploadFiles200Response.md b/samples/client/petstore/csharp/generichost/net4.8/FormModels/docs/models/UploadFiles200Response.md new file mode 100644 index 000000000000..8e32fc151b34 --- /dev/null +++ b/samples/client/petstore/csharp/generichost/net4.8/FormModels/docs/models/UploadFiles200Response.md @@ -0,0 +1,11 @@ +# Org.OpenAPITools.Model.UploadFiles200Response + +## Properties + +Name | Type | Description | Notes +------------ | ------------- | ------------- | ------------- +**FileCount** | **int** | | [optional] +**Message** | **string** | | [optional] + +[[Back to Model list]](../../README.md#documentation-for-models) [[Back to API list]](../../README.md#documentation-for-api-endpoints) [[Back to README]](../../README.md) + diff --git a/samples/client/petstore/csharp/generichost/net4.8/FormModels/src/Org.OpenAPITools.Test/Model/UploadFiles200ResponseTests.cs b/samples/client/petstore/csharp/generichost/net4.8/FormModels/src/Org.OpenAPITools.Test/Model/UploadFiles200ResponseTests.cs new file mode 100644 index 000000000000..e6003ac29cfe --- /dev/null +++ b/samples/client/petstore/csharp/generichost/net4.8/FormModels/src/Org.OpenAPITools.Test/Model/UploadFiles200ResponseTests.cs @@ -0,0 +1,74 @@ +/* + * OpenAPI Petstore + * + * This spec is mainly for testing Petstore server and contains fake endpoints, models. Please do not use this for any other purpose. Special characters: \" \\ + * + * The version of the OpenAPI document: 1.0.0 + * Generated by: https://github.com/openapitools/openapi-generator.git + */ + + +using Xunit; + +using System; +using System.Linq; +using System.IO; +using System.Collections.Generic; +using Org.OpenAPITools.Model; +using Org.OpenAPITools.Client; +using System.Reflection; + +namespace Org.OpenAPITools.Test.Model +{ + /// + /// Class for testing UploadFiles200Response + /// + /// + /// This file is automatically generated by OpenAPI Generator (https://openapi-generator.tech). + /// Please update the test case below to test the model. + /// + public class UploadFiles200ResponseTests : IDisposable + { + // TODO uncomment below to declare an instance variable for UploadFiles200Response + //private UploadFiles200Response instance; + + public UploadFiles200ResponseTests() + { + // TODO uncomment below to create an instance of UploadFiles200Response + //instance = new UploadFiles200Response(); + } + + public void Dispose() + { + // Cleanup when everything is done. + } + + /// + /// Test an instance of UploadFiles200Response + /// + [Fact] + public void UploadFiles200ResponseInstanceTest() + { + // TODO uncomment below to test "IsType" UploadFiles200Response + //Assert.IsType(instance); + } + + /// + /// Test the property 'FileCount' + /// + [Fact] + public void FileCountTest() + { + // TODO unit test for the property 'FileCount' + } + + /// + /// Test the property 'Message' + /// + [Fact] + public void MessageTest() + { + // TODO unit test for the property 'Message' + } + } +} diff --git a/samples/client/petstore/csharp/generichost/net4.8/FormModels/src/Org.OpenAPITools/Api/DefaultApi.cs b/samples/client/petstore/csharp/generichost/net4.8/FormModels/src/Org.OpenAPITools/Api/DefaultApi.cs index d58c2e585a05..71bf74039ae8 100644 --- a/samples/client/petstore/csharp/generichost/net4.8/FormModels/src/Org.OpenAPITools/Api/DefaultApi.cs +++ b/samples/client/petstore/csharp/generichost/net4.8/FormModels/src/Org.OpenAPITools/Api/DefaultApi.cs @@ -139,6 +139,29 @@ public interface IDefaultApi : IApi /// Cancellation Token to cancel the request. /// <> Task TestOrDefaultAsync(System.Threading.CancellationToken cancellationToken = default); + + /// + /// Upload multiple files + /// + /// + /// + /// + /// Thrown when fails to make API call + /// + /// Cancellation Token to cancel the request. + /// <> + Task UploadFilesAsync(List files, System.Threading.CancellationToken cancellationToken = default); + + /// + /// Upload multiple files + /// + /// + /// + /// + /// + /// Cancellation Token to cancel the request. + /// <> + Task UploadFilesOrDefaultAsync(List files, System.Threading.CancellationToken cancellationToken = default); } /// @@ -201,6 +224,18 @@ public interface ITestApiResponse : Org.OpenAPITools.Client.IApiResponse, IOk + /// The + /// + public interface IUploadFilesApiResponse : Org.OpenAPITools.Client.IApiResponse, IOk + { + /// + /// Returns true if the response is 200 Ok + /// + /// + bool IsOk { get; } + } + /// /// Represents a collection of functions to interact with the API endpoints /// @@ -305,6 +340,26 @@ internal void ExecuteOnErrorTest(Exception exception) { OnErrorTest?.Invoke(this, new ExceptionEventArgs(exception)); } + + /// + /// The event raised after the server response + /// + public event EventHandler OnUploadFiles; + + /// + /// The event raised after an error querying the server + /// + public event EventHandler OnErrorUploadFiles; + + internal void ExecuteOnUploadFiles(DefaultApi.UploadFilesApiResponse apiResponse) + { + OnUploadFiles?.Invoke(this, new ApiResponseEventArgs(apiResponse)); + } + + internal void ExecuteOnErrorUploadFiles(Exception exception) + { + OnErrorUploadFiles?.Invoke(this, new ExceptionEventArgs(exception)); + } } /// @@ -1358,5 +1413,251 @@ private void OnDeserializationErrorDefaultImplementation(Exception exception, Ht partial void OnDeserializationError(ref bool suppressDefaultLog, Exception exception, HttpStatusCode httpStatusCode); } + + partial void FormatUploadFiles(List files); + + /// + /// Validates the request parameters + /// + /// + /// + private void ValidateUploadFiles(List files) + { + if (files == null) + throw new ArgumentNullException(nameof(files)); + } + + /// + /// Processes the server response + /// + /// + /// + private void AfterUploadFilesDefaultImplementation(IUploadFilesApiResponse apiResponseLocalVar, List files) + { + bool suppressDefaultLog = false; + AfterUploadFiles(ref suppressDefaultLog, apiResponseLocalVar, files); + if (!suppressDefaultLog) + Logger.LogInformation("{0,-9} | {1} | {3}", (apiResponseLocalVar.DownloadedAt - apiResponseLocalVar.RequestedAt).TotalSeconds, apiResponseLocalVar.StatusCode, apiResponseLocalVar.Path); + } + + /// + /// Processes the server response + /// + /// + /// + /// + partial void AfterUploadFiles(ref bool suppressDefaultLog, IUploadFilesApiResponse apiResponseLocalVar, List files); + + /// + /// Logs exceptions that occur while retrieving the server response + /// + /// + /// + /// + /// + private void OnErrorUploadFilesDefaultImplementation(Exception exceptionLocalVar, string pathFormatLocalVar, string pathLocalVar, List files) + { + bool suppressDefaultLogLocalVar = false; + OnErrorUploadFiles(ref suppressDefaultLogLocalVar, exceptionLocalVar, pathFormatLocalVar, pathLocalVar, files); + if (!suppressDefaultLogLocalVar) + Logger.LogError(exceptionLocalVar, "An error occurred while sending the request to the server."); + } + + /// + /// A partial method that gives developers a way to provide customized exception handling + /// + /// + /// + /// + /// + /// + partial void OnErrorUploadFiles(ref bool suppressDefaultLogLocalVar, Exception exceptionLocalVar, string pathFormatLocalVar, string pathLocalVar, List files); + + /// + /// Upload multiple files + /// + /// + /// Cancellation Token to cancel the request. + /// <> + public async Task UploadFilesOrDefaultAsync(List files, System.Threading.CancellationToken cancellationToken = default) + { + try + { + return await UploadFilesAsync(files, cancellationToken).ConfigureAwait(false); + } + catch (Exception) + { + return null; + } + } + + /// + /// Upload multiple files + /// + /// Thrown when fails to make API call + /// + /// Cancellation Token to cancel the request. + /// <> + public async Task UploadFilesAsync(List files, System.Threading.CancellationToken cancellationToken = default) + { + UriBuilder uriBuilderLocalVar = new UriBuilder(); + + try + { + ValidateUploadFiles(files); + + FormatUploadFiles(files); + + using (HttpRequestMessage httpRequestMessageLocalVar = new HttpRequestMessage()) + { + uriBuilderLocalVar.Host = HttpClient.BaseAddress.Host; + uriBuilderLocalVar.Port = HttpClient.BaseAddress.Port; + uriBuilderLocalVar.Scheme = HttpClient.BaseAddress.Scheme; + uriBuilderLocalVar.Path = HttpClient.BaseAddress.AbsolutePath == "/" + ? "/upload" + : string.Concat(HttpClient.BaseAddress.AbsolutePath, "/upload"); + + MultipartContent multipartContentLocalVar = new MultipartContent(); + + httpRequestMessageLocalVar.Content = multipartContentLocalVar; + + List> formParameterLocalVars = new List>(); + + multipartContentLocalVar.Add(new FormUrlEncodedContent(formParameterLocalVars)); + + foreach (global::System.IO.Stream streamLocalVar in files) + { + 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); + } + + httpRequestMessageLocalVar.RequestUri = uriBuilderLocalVar.Uri; + + string[] contentTypes = new string[] { + "multipart/form-data" + }; + + string contentTypeLocalVar = ClientUtils.SelectHeaderContentType(contentTypes); + + if (contentTypeLocalVar != null && httpRequestMessageLocalVar.Content != null) + httpRequestMessageLocalVar.Content.Headers.ContentType = new MediaTypeHeaderValue(contentTypeLocalVar); + + string[] acceptLocalVars = new string[] { + "application/json" + }; + + string acceptLocalVar = ClientUtils.SelectHeaderAccept(acceptLocalVars); + + if (acceptLocalVar != null) + httpRequestMessageLocalVar.Headers.Accept.Add(new MediaTypeWithQualityHeaderValue(acceptLocalVar)); + httpRequestMessageLocalVar.Method = new HttpMethod("POST"); + + DateTime requestedAtLocalVar = DateTime.UtcNow; + + using (HttpResponseMessage httpResponseMessageLocalVar = await HttpClient.SendAsync(httpRequestMessageLocalVar, cancellationToken).ConfigureAwait(false)) + { + string responseContentLocalVar = await httpResponseMessageLocalVar.Content.ReadAsStringAsync().ConfigureAwait(false); + + ILogger apiResponseLoggerLocalVar = LoggerFactory.CreateLogger(); + + UploadFilesApiResponse apiResponseLocalVar = new UploadFilesApiResponse(apiResponseLoggerLocalVar, httpRequestMessageLocalVar, httpResponseMessageLocalVar, responseContentLocalVar, "/upload", requestedAtLocalVar, _jsonSerializerOptions); + + AfterUploadFilesDefaultImplementation(apiResponseLocalVar, files); + + Events.ExecuteOnUploadFiles(apiResponseLocalVar); + + return apiResponseLocalVar; + } + } + } + catch(Exception e) + { + OnErrorUploadFilesDefaultImplementation(e, "/upload", uriBuilderLocalVar.Path, files); + Events.ExecuteOnErrorUploadFiles(e); + throw; + } + } + + /// + /// The + /// + public partial class UploadFilesApiResponse : Org.OpenAPITools.Client.ApiResponse, IUploadFilesApiResponse + { + /// + /// The logger + /// + public ILogger Logger { get; } + + /// + /// The + /// + /// + /// + /// + /// + /// + /// + /// + public UploadFilesApiResponse(ILogger logger, System.Net.Http.HttpRequestMessage httpRequestMessage, System.Net.Http.HttpResponseMessage httpResponseMessage, string rawContent, string path, DateTime requestedAt, System.Text.Json.JsonSerializerOptions jsonSerializerOptions) : base(httpRequestMessage, httpResponseMessage, rawContent, path, requestedAt, jsonSerializerOptions) + { + Logger = logger; + OnCreated(httpRequestMessage, httpResponseMessage); + } + + partial void OnCreated(global::System.Net.Http.HttpRequestMessage httpRequestMessage, System.Net.Http.HttpResponseMessage httpResponseMessage); + + /// + /// Returns true if the response is 200 Ok + /// + /// + public bool IsOk => 200 == (int)StatusCode; + + /// + /// Deserializes the response if the response is 200 Ok + /// + /// + public Org.OpenAPITools.Model.UploadFiles200Response Ok() + { + // This logic may be modified with the AsModel.mustache template + return IsOk + ? System.Text.Json.JsonSerializer.Deserialize(RawContent, _jsonSerializerOptions) + : default; + } + + /// + /// Returns true if the response is 200 Ok and the deserialized response is not null + /// + /// + /// + public bool TryOk(out Org.OpenAPITools.Model.UploadFiles200Response result) + { + result = null; + + try + { + result = Ok(); + } catch (Exception e) + { + OnDeserializationErrorDefaultImplementation(e, (HttpStatusCode)200); + } + + return result != null; + } + + private void OnDeserializationErrorDefaultImplementation(Exception exception, HttpStatusCode httpStatusCode) + { + bool suppressDefaultLog = false; + OnDeserializationError(ref suppressDefaultLog, exception, httpStatusCode); + if (!suppressDefaultLog) + Logger.LogError(exception, "An error occurred while deserializing the {code} response.", httpStatusCode); + } + + partial void OnDeserializationError(ref bool suppressDefaultLog, Exception exception, HttpStatusCode httpStatusCode); + } } } diff --git a/samples/client/petstore/csharp/generichost/net4.8/FormModels/src/Org.OpenAPITools/Api/FakeApi.cs b/samples/client/petstore/csharp/generichost/net4.8/FormModels/src/Org.OpenAPITools/Api/FakeApi.cs index cad9b286184b..2b9df6813355 100644 --- a/samples/client/petstore/csharp/generichost/net4.8/FormModels/src/Org.OpenAPITools/Api/FakeApi.cs +++ b/samples/client/petstore/csharp/generichost/net4.8/FormModels/src/Org.OpenAPITools/Api/FakeApi.cs @@ -4024,7 +4024,6 @@ public async Task TestEndpointParametersAsyn if (binary.IsSet) multipartContentLocalVar.Add(new StreamContent(binary.Value)); - if (callback.IsSet) formParameterLocalVars.Add(new KeyValuePair("callback", ClientUtils.ParameterToString(callback.Value))); @@ -4334,7 +4333,9 @@ public async Task TestEnumParametersAsync(Option List> formParameterLocalVars = new List>(); - multipartContentLocalVar.Add(new FormUrlEncodedContent(formParameterLocalVars)); if (enumFormString.IsSet) + multipartContentLocalVar.Add(new FormUrlEncodedContent(formParameterLocalVars)); + + if (enumFormString.IsSet) formParameterLocalVars.Add(new KeyValuePair("enum_form_string", ClientUtils.ParameterToString(enumFormString.Value))); if (enumFormStringArray.IsSet) diff --git a/samples/client/petstore/csharp/generichost/net4.8/FormModels/src/Org.OpenAPITools/Api/PetApi.cs b/samples/client/petstore/csharp/generichost/net4.8/FormModels/src/Org.OpenAPITools/Api/PetApi.cs index e031f4d97303..769ca8630899 100644 --- a/samples/client/petstore/csharp/generichost/net4.8/FormModels/src/Org.OpenAPITools/Api/PetApi.cs +++ b/samples/client/petstore/csharp/generichost/net4.8/FormModels/src/Org.OpenAPITools/Api/PetApi.cs @@ -2198,7 +2198,9 @@ public async Task UpdatePetWithFormAsync(long pet List> formParameterLocalVars = new List>(); - multipartContentLocalVar.Add(new FormUrlEncodedContent(formParameterLocalVars)); if (name.IsSet) + multipartContentLocalVar.Add(new FormUrlEncodedContent(formParameterLocalVars)); + + if (name.IsSet) formParameterLocalVars.Add(new KeyValuePair("name", ClientUtils.ParameterToString(name.Value))); if (status.IsSet) @@ -2425,12 +2427,13 @@ public async Task UploadFileAsync(long petId, Option> formParameterLocalVars = new List>(); - multipartContentLocalVar.Add(new FormUrlEncodedContent(formParameterLocalVars)); if (additionalMetadata.IsSet) + multipartContentLocalVar.Add(new FormUrlEncodedContent(formParameterLocalVars)); + + if (additionalMetadata.IsSet) formParameterLocalVars.Add(new KeyValuePair("additionalMetadata", ClientUtils.ParameterToString(additionalMetadata.Value))); if (file.IsSet) multipartContentLocalVar.Add(new StreamContent(file.Value)); - List tokenBaseLocalVars = new List(); httpRequestMessageLocalVar.RequestUri = uriBuilderLocalVar.Uri; @@ -2692,7 +2695,9 @@ public async Task UploadFileWithRequired List> formParameterLocalVars = new List>(); - multipartContentLocalVar.Add(new FormUrlEncodedContent(formParameterLocalVars)); multipartContentLocalVar.Add(new StreamContent(requiredFile)); + multipartContentLocalVar.Add(new FormUrlEncodedContent(formParameterLocalVars)); + + multipartContentLocalVar.Add(new StreamContent(requiredFile)); if (additionalMetadata.IsSet) formParameterLocalVars.Add(new KeyValuePair("additionalMetadata", ClientUtils.ParameterToString(additionalMetadata.Value))); diff --git a/samples/client/petstore/csharp/generichost/net4.8/FormModels/src/Org.OpenAPITools/Client/HostConfiguration.cs b/samples/client/petstore/csharp/generichost/net4.8/FormModels/src/Org.OpenAPITools/Client/HostConfiguration.cs index 57b402a3000e..66b2e7a2a7c8 100644 --- a/samples/client/petstore/csharp/generichost/net4.8/FormModels/src/Org.OpenAPITools/Client/HostConfiguration.cs +++ b/samples/client/petstore/csharp/generichost/net4.8/FormModels/src/Org.OpenAPITools/Client/HostConfiguration.cs @@ -188,6 +188,7 @@ public HostConfiguration(IServiceCollection services) _jsonOptions.Converters.Add(new TestResultCodeNullableJsonConverter()); _jsonOptions.Converters.Add(new TriangleJsonConverter()); _jsonOptions.Converters.Add(new TriangleInterfaceJsonConverter()); + _jsonOptions.Converters.Add(new UploadFiles200ResponseJsonConverter()); _jsonOptions.Converters.Add(new UserJsonConverter()); _jsonOptions.Converters.Add(new WhaleJsonConverter()); _jsonOptions.Converters.Add(new ZebraJsonConverter()); diff --git a/samples/client/petstore/csharp/generichost/net4.8/FormModels/src/Org.OpenAPITools/Model/UploadFiles200Response.cs b/samples/client/petstore/csharp/generichost/net4.8/FormModels/src/Org.OpenAPITools/Model/UploadFiles200Response.cs new file mode 100644 index 000000000000..9166257e1cbe --- /dev/null +++ b/samples/client/petstore/csharp/generichost/net4.8/FormModels/src/Org.OpenAPITools/Model/UploadFiles200Response.cs @@ -0,0 +1,200 @@ +// +/* + * OpenAPI Petstore + * + * This spec is mainly for testing Petstore server and contains fake endpoints, models. Please do not use this for any other purpose. Special characters: \" \\ + * + * The version of the OpenAPI document: 1.0.0 + * Generated by: https://github.com/openapitools/openapi-generator.git + */ + +using System; +using System.Collections; +using System.Collections.Generic; +using System.Collections.ObjectModel; +using System.Linq; +using System.IO; +using System.Text; +using System.Text.RegularExpressions; +using System.Text.Json; +using System.Text.Json.Serialization; +using System.ComponentModel.DataAnnotations; +using OpenAPIClientUtils = Org.OpenAPITools.Client.ClientUtils; +using Org.OpenAPITools.Client; + +namespace Org.OpenAPITools.Model +{ + /// + /// UploadFiles200Response + /// + public partial class UploadFiles200Response : IValidatableObject + { + /// + /// Initializes a new instance of the class. + /// + /// fileCount + /// message + [JsonConstructor] + public UploadFiles200Response(Option fileCount = default, Option message = default) + { + FileCountOption = fileCount; + MessageOption = message; + OnCreated(); + } + + partial void OnCreated(); + + /// + /// Used to track the state of FileCount + /// + [JsonIgnore] + [global::System.ComponentModel.EditorBrowsable(global::System.ComponentModel.EditorBrowsableState.Never)] + public Option FileCountOption { get; private set; } + + /// + /// Gets or Sets FileCount + /// + [JsonPropertyName("fileCount")] + public int? FileCount { get { return this.FileCountOption; } set { this.FileCountOption = new Option(value); } } + + /// + /// Used to track the state of Message + /// + [JsonIgnore] + [global::System.ComponentModel.EditorBrowsable(global::System.ComponentModel.EditorBrowsableState.Never)] + public Option MessageOption { get; private set; } + + /// + /// Gets or Sets Message + /// + [JsonPropertyName("message")] + public string Message { get { return this.MessageOption; } set { this.MessageOption = new Option(value); } } + + /// + /// Gets or Sets additional properties + /// + [JsonExtensionData] + public Dictionary AdditionalProperties { get; } = new Dictionary(); + + /// + /// Returns the string presentation of the object + /// + /// String presentation of the object + public override string ToString() + { + StringBuilder sb = new StringBuilder(); + sb.Append("class UploadFiles200Response {\n"); + sb.Append(" FileCount: ").Append(FileCount).Append("\n"); + sb.Append(" Message: ").Append(Message).Append("\n"); + sb.Append(" AdditionalProperties: ").Append(AdditionalProperties).Append("\n"); + sb.Append("}\n"); + return sb.ToString(); + } + + /// + /// To validate all properties of the instance + /// + /// Validation context + /// Validation Result + IEnumerable IValidatableObject.Validate(ValidationContext validationContext) + { + yield break; + } + } + + /// + /// A Json converter for type + /// + public class UploadFiles200ResponseJsonConverter : JsonConverter + { + /// + /// Deserializes json to + /// + /// + /// + /// + /// + /// + public override UploadFiles200Response Read(ref Utf8JsonReader utf8JsonReader, Type typeToConvert, JsonSerializerOptions jsonSerializerOptions) + { + int currentDepth = utf8JsonReader.CurrentDepth; + + if (utf8JsonReader.TokenType != JsonTokenType.StartObject && utf8JsonReader.TokenType != JsonTokenType.StartArray) + throw new JsonException(); + + JsonTokenType startingTokenType = utf8JsonReader.TokenType; + + Option fileCount = default; + Option message = default; + + while (utf8JsonReader.Read()) + { + if (startingTokenType == JsonTokenType.StartObject && utf8JsonReader.TokenType == JsonTokenType.EndObject && currentDepth == utf8JsonReader.CurrentDepth) + break; + + if (startingTokenType == JsonTokenType.StartArray && utf8JsonReader.TokenType == JsonTokenType.EndArray && currentDepth == utf8JsonReader.CurrentDepth) + break; + + if (utf8JsonReader.TokenType == JsonTokenType.PropertyName && currentDepth == utf8JsonReader.CurrentDepth - 1) + { + string localVarJsonPropertyName = utf8JsonReader.GetString(); + utf8JsonReader.Read(); + + switch (localVarJsonPropertyName) + { + case "fileCount": + fileCount = new Option(utf8JsonReader.TokenType == JsonTokenType.Null ? (int?)null : utf8JsonReader.GetInt32()); + break; + case "message": + message = new Option(utf8JsonReader.GetString()); + break; + default: + break; + } + } + } + + if (fileCount.IsSet && fileCount.Value == null) + throw new ArgumentNullException(nameof(fileCount), "Property is not nullable for class UploadFiles200Response."); + + if (message.IsSet && message.Value == null) + throw new ArgumentNullException(nameof(message), "Property is not nullable for class UploadFiles200Response."); + + return new UploadFiles200Response(fileCount, message); + } + + /// + /// Serializes a + /// + /// + /// + /// + /// + public override void Write(Utf8JsonWriter writer, UploadFiles200Response uploadFiles200Response, JsonSerializerOptions jsonSerializerOptions) + { + writer.WriteStartObject(); + + WriteProperties(writer, uploadFiles200Response, jsonSerializerOptions); + writer.WriteEndObject(); + } + + /// + /// Serializes the properties of + /// + /// + /// + /// + /// + public void WriteProperties(Utf8JsonWriter writer, UploadFiles200Response uploadFiles200Response, JsonSerializerOptions jsonSerializerOptions) + { + if (uploadFiles200Response.MessageOption.IsSet && uploadFiles200Response.Message == null) + throw new ArgumentNullException(nameof(uploadFiles200Response.Message), "Property is required for class UploadFiles200Response."); + + if (uploadFiles200Response.FileCountOption.IsSet) + writer.WriteNumber("fileCount", uploadFiles200Response.FileCountOption.Value.Value); + + if (uploadFiles200Response.MessageOption.IsSet) + writer.WriteString("message", uploadFiles200Response.Message); + } + } +} diff --git a/samples/client/petstore/csharp/generichost/net4.8/FormModels/src/Org.OpenAPITools/README.md b/samples/client/petstore/csharp/generichost/net4.8/FormModels/src/Org.OpenAPITools/README.md index 80f8c6bea340..c4d7b255ae76 100644 --- a/samples/client/petstore/csharp/generichost/net4.8/FormModels/src/Org.OpenAPITools/README.md +++ b/samples/client/petstore/csharp/generichost/net4.8/FormModels/src/Org.OpenAPITools/README.md @@ -115,5 +115,5 @@ namespace YourProject This C# SDK is automatically generated by the [OpenAPI Generator](https://openapi-generator.tech) project. - SDK version: 1.0.0 -- Generator version: 7.14.0-SNAPSHOT +- Generator version: 7.14.0 - Build package: org.openapitools.codegen.languages.CSharpClientCodegen diff --git a/samples/client/petstore/csharp/generichost/net4.8/OneOf/.openapi-generator/VERSION b/samples/client/petstore/csharp/generichost/net4.8/OneOf/.openapi-generator/VERSION index 4c631cf217a2..e465da43155f 100644 --- a/samples/client/petstore/csharp/generichost/net4.8/OneOf/.openapi-generator/VERSION +++ b/samples/client/petstore/csharp/generichost/net4.8/OneOf/.openapi-generator/VERSION @@ -1 +1 @@ -7.14.0-SNAPSHOT +7.14.0 diff --git a/samples/client/petstore/csharp/generichost/net4.8/OneOf/src/Org.OpenAPITools/README.md b/samples/client/petstore/csharp/generichost/net4.8/OneOf/src/Org.OpenAPITools/README.md index ce81d07fae93..b8f7bdef3fd6 100644 --- a/samples/client/petstore/csharp/generichost/net4.8/OneOf/src/Org.OpenAPITools/README.md +++ b/samples/client/petstore/csharp/generichost/net4.8/OneOf/src/Org.OpenAPITools/README.md @@ -107,5 +107,5 @@ namespace YourProject This C# SDK is automatically generated by the [OpenAPI Generator](https://openapi-generator.tech) project. - SDK version: 1.0.0 -- Generator version: 7.14.0-SNAPSHOT +- Generator version: 7.14.0 - Build package: org.openapitools.codegen.languages.CSharpClientCodegen diff --git a/samples/client/petstore/csharp/generichost/net4.8/Petstore/.openapi-generator/FILES b/samples/client/petstore/csharp/generichost/net4.8/Petstore/.openapi-generator/FILES index a6635c9d8351..d6f015766350 100644 --- a/samples/client/petstore/csharp/generichost/net4.8/Petstore/.openapi-generator/FILES +++ b/samples/client/petstore/csharp/generichost/net4.8/Petstore/.openapi-generator/FILES @@ -108,6 +108,7 @@ docs/models/TestResult.md docs/models/TestResultCode.md docs/models/Triangle.md docs/models/TriangleInterface.md +docs/models/UploadFiles200Response.md docs/models/User.md docs/models/Whale.md docs/models/Zebra.md @@ -116,6 +117,7 @@ docs/models/ZeroBasedEnumClass.md docs/scripts/git_push.ps1 docs/scripts/git_push.sh src/Org.OpenAPITools.Test/Api/DependencyInjectionTests.cs +src/Org.OpenAPITools.Test/Model/UploadFiles200ResponseTests.cs src/Org.OpenAPITools.Test/Org.OpenAPITools.Test.csproj src/Org.OpenAPITools.Test/README.md src/Org.OpenAPITools/Api/AnotherFakeApi.cs @@ -249,6 +251,7 @@ src/Org.OpenAPITools/Model/TestResult.cs src/Org.OpenAPITools/Model/TestResultCode.cs src/Org.OpenAPITools/Model/Triangle.cs src/Org.OpenAPITools/Model/TriangleInterface.cs +src/Org.OpenAPITools/Model/UploadFiles200Response.cs src/Org.OpenAPITools/Model/User.cs src/Org.OpenAPITools/Model/Whale.cs src/Org.OpenAPITools/Model/Zebra.cs diff --git a/samples/client/petstore/csharp/generichost/net4.8/Petstore/.openapi-generator/VERSION b/samples/client/petstore/csharp/generichost/net4.8/Petstore/.openapi-generator/VERSION index 4c631cf217a2..e465da43155f 100644 --- a/samples/client/petstore/csharp/generichost/net4.8/Petstore/.openapi-generator/VERSION +++ b/samples/client/petstore/csharp/generichost/net4.8/Petstore/.openapi-generator/VERSION @@ -1 +1 @@ -7.14.0-SNAPSHOT +7.14.0 diff --git a/samples/client/petstore/csharp/generichost/net4.8/Petstore/api/openapi.yaml b/samples/client/petstore/csharp/generichost/net4.8/Petstore/api/openapi.yaml index d86a1d2f6d87..276850a46bc1 100644 --- a/samples/client/petstore/csharp/generichost/net4.8/Petstore/api/openapi.yaml +++ b/samples/client/petstore/csharp/generichost/net4.8/Petstore/api/openapi.yaml @@ -41,6 +41,23 @@ tags: - description: Operations about user name: user paths: + /upload: + post: + operationId: uploadFiles + requestBody: + content: + multipart/form-data: + schema: + $ref: "#/components/schemas/uploadFiles_request" + required: true + responses: + "200": + content: + application/json: + schema: + $ref: "#/components/schemas/uploadFiles_200_response" + description: Files uploaded successfully + summary: Upload multiple files /roles/report: get: responses: @@ -2865,6 +2882,26 @@ components: - APPROVED - MANUAL_APPROVAL_REQUIRED type: string + uploadFiles_request: + properties: + files: + items: + format: binary + type: string + type: array + required: + - files + type: object + uploadFiles_200_response: + example: + message: message + fileCount: 0 + properties: + message: + type: string + fileCount: + type: integer + type: object _foo_get_default_response: example: string: diff --git a/samples/client/petstore/csharp/generichost/net4.8/Petstore/docs/apis/DefaultApi.md b/samples/client/petstore/csharp/generichost/net4.8/Petstore/docs/apis/DefaultApi.md index e97541b8b6a5..0fa36d06dcaf 100644 --- a/samples/client/petstore/csharp/generichost/net4.8/Petstore/docs/apis/DefaultApi.md +++ b/samples/client/petstore/csharp/generichost/net4.8/Petstore/docs/apis/DefaultApi.md @@ -9,6 +9,7 @@ All URIs are relative to *http://petstore.swagger.io:80/v2* | [**Hello**](DefaultApi.md#hello) | **GET** /hello | Hello | | [**RolesReportGet**](DefaultApi.md#rolesreportget) | **GET** /roles/report | | | [**Test**](DefaultApi.md#test) | **GET** /test | Retrieve an existing Notificationtest's Elements | +| [**UploadFiles**](DefaultApi.md#uploadfiles) | **POST** /upload | Upload multiple files | # **FooGet** @@ -166,3 +167,37 @@ No authorization required [[Back to top]](#) [[Back to API list]](../../README.md#documentation-for-api-endpoints) [[Back to Model list]](../../README.md#documentation-for-models) [[Back to README]](../../README.md) + +# **UploadFiles** +> UploadFiles200Response UploadFiles (List files) + +Upload multiple files + + +### Parameters + +| Name | Type | Description | Notes | +|------|------|-------------|-------| +| **files** | **List<System.IO.Stream>** | | | + +### Return type + +[**UploadFiles200Response**](UploadFiles200Response.md) + +### Authorization + +No authorization required + +### HTTP request headers + + - **Content-Type**: multipart/form-data + - **Accept**: application/json + + +### HTTP response details +| Status code | Description | Response headers | +|-------------|-------------|------------------| +| **200** | Files uploaded successfully | - | + +[[Back to top]](#) [[Back to API list]](../../README.md#documentation-for-api-endpoints) [[Back to Model list]](../../README.md#documentation-for-models) [[Back to README]](../../README.md) + diff --git a/samples/client/petstore/csharp/generichost/net4.8/Petstore/docs/models/UploadFiles200Response.md b/samples/client/petstore/csharp/generichost/net4.8/Petstore/docs/models/UploadFiles200Response.md new file mode 100644 index 000000000000..8e32fc151b34 --- /dev/null +++ b/samples/client/petstore/csharp/generichost/net4.8/Petstore/docs/models/UploadFiles200Response.md @@ -0,0 +1,11 @@ +# Org.OpenAPITools.Model.UploadFiles200Response + +## Properties + +Name | Type | Description | Notes +------------ | ------------- | ------------- | ------------- +**FileCount** | **int** | | [optional] +**Message** | **string** | | [optional] + +[[Back to Model list]](../../README.md#documentation-for-models) [[Back to API list]](../../README.md#documentation-for-api-endpoints) [[Back to README]](../../README.md) + diff --git a/samples/client/petstore/csharp/generichost/net4.8/Petstore/src/Org.OpenAPITools.Test/Model/UploadFiles200ResponseTests.cs b/samples/client/petstore/csharp/generichost/net4.8/Petstore/src/Org.OpenAPITools.Test/Model/UploadFiles200ResponseTests.cs new file mode 100644 index 000000000000..e6003ac29cfe --- /dev/null +++ b/samples/client/petstore/csharp/generichost/net4.8/Petstore/src/Org.OpenAPITools.Test/Model/UploadFiles200ResponseTests.cs @@ -0,0 +1,74 @@ +/* + * OpenAPI Petstore + * + * This spec is mainly for testing Petstore server and contains fake endpoints, models. Please do not use this for any other purpose. Special characters: \" \\ + * + * The version of the OpenAPI document: 1.0.0 + * Generated by: https://github.com/openapitools/openapi-generator.git + */ + + +using Xunit; + +using System; +using System.Linq; +using System.IO; +using System.Collections.Generic; +using Org.OpenAPITools.Model; +using Org.OpenAPITools.Client; +using System.Reflection; + +namespace Org.OpenAPITools.Test.Model +{ + /// + /// Class for testing UploadFiles200Response + /// + /// + /// This file is automatically generated by OpenAPI Generator (https://openapi-generator.tech). + /// Please update the test case below to test the model. + /// + public class UploadFiles200ResponseTests : IDisposable + { + // TODO uncomment below to declare an instance variable for UploadFiles200Response + //private UploadFiles200Response instance; + + public UploadFiles200ResponseTests() + { + // TODO uncomment below to create an instance of UploadFiles200Response + //instance = new UploadFiles200Response(); + } + + public void Dispose() + { + // Cleanup when everything is done. + } + + /// + /// Test an instance of UploadFiles200Response + /// + [Fact] + public void UploadFiles200ResponseInstanceTest() + { + // TODO uncomment below to test "IsType" UploadFiles200Response + //Assert.IsType(instance); + } + + /// + /// Test the property 'FileCount' + /// + [Fact] + public void FileCountTest() + { + // TODO unit test for the property 'FileCount' + } + + /// + /// Test the property 'Message' + /// + [Fact] + public void MessageTest() + { + // TODO unit test for the property 'Message' + } + } +} diff --git a/samples/client/petstore/csharp/generichost/net4.8/Petstore/src/Org.OpenAPITools/Api/DefaultApi.cs b/samples/client/petstore/csharp/generichost/net4.8/Petstore/src/Org.OpenAPITools/Api/DefaultApi.cs index d58c2e585a05..71bf74039ae8 100644 --- a/samples/client/petstore/csharp/generichost/net4.8/Petstore/src/Org.OpenAPITools/Api/DefaultApi.cs +++ b/samples/client/petstore/csharp/generichost/net4.8/Petstore/src/Org.OpenAPITools/Api/DefaultApi.cs @@ -139,6 +139,29 @@ public interface IDefaultApi : IApi /// Cancellation Token to cancel the request. /// <> Task TestOrDefaultAsync(System.Threading.CancellationToken cancellationToken = default); + + /// + /// Upload multiple files + /// + /// + /// + /// + /// Thrown when fails to make API call + /// + /// Cancellation Token to cancel the request. + /// <> + Task UploadFilesAsync(List files, System.Threading.CancellationToken cancellationToken = default); + + /// + /// Upload multiple files + /// + /// + /// + /// + /// + /// Cancellation Token to cancel the request. + /// <> + Task UploadFilesOrDefaultAsync(List files, System.Threading.CancellationToken cancellationToken = default); } /// @@ -201,6 +224,18 @@ public interface ITestApiResponse : Org.OpenAPITools.Client.IApiResponse, IOk + /// The + /// + public interface IUploadFilesApiResponse : Org.OpenAPITools.Client.IApiResponse, IOk + { + /// + /// Returns true if the response is 200 Ok + /// + /// + bool IsOk { get; } + } + /// /// Represents a collection of functions to interact with the API endpoints /// @@ -305,6 +340,26 @@ internal void ExecuteOnErrorTest(Exception exception) { OnErrorTest?.Invoke(this, new ExceptionEventArgs(exception)); } + + /// + /// The event raised after the server response + /// + public event EventHandler OnUploadFiles; + + /// + /// The event raised after an error querying the server + /// + public event EventHandler OnErrorUploadFiles; + + internal void ExecuteOnUploadFiles(DefaultApi.UploadFilesApiResponse apiResponse) + { + OnUploadFiles?.Invoke(this, new ApiResponseEventArgs(apiResponse)); + } + + internal void ExecuteOnErrorUploadFiles(Exception exception) + { + OnErrorUploadFiles?.Invoke(this, new ExceptionEventArgs(exception)); + } } /// @@ -1358,5 +1413,251 @@ private void OnDeserializationErrorDefaultImplementation(Exception exception, Ht partial void OnDeserializationError(ref bool suppressDefaultLog, Exception exception, HttpStatusCode httpStatusCode); } + + partial void FormatUploadFiles(List files); + + /// + /// Validates the request parameters + /// + /// + /// + private void ValidateUploadFiles(List files) + { + if (files == null) + throw new ArgumentNullException(nameof(files)); + } + + /// + /// Processes the server response + /// + /// + /// + private void AfterUploadFilesDefaultImplementation(IUploadFilesApiResponse apiResponseLocalVar, List files) + { + bool suppressDefaultLog = false; + AfterUploadFiles(ref suppressDefaultLog, apiResponseLocalVar, files); + if (!suppressDefaultLog) + Logger.LogInformation("{0,-9} | {1} | {3}", (apiResponseLocalVar.DownloadedAt - apiResponseLocalVar.RequestedAt).TotalSeconds, apiResponseLocalVar.StatusCode, apiResponseLocalVar.Path); + } + + /// + /// Processes the server response + /// + /// + /// + /// + partial void AfterUploadFiles(ref bool suppressDefaultLog, IUploadFilesApiResponse apiResponseLocalVar, List files); + + /// + /// Logs exceptions that occur while retrieving the server response + /// + /// + /// + /// + /// + private void OnErrorUploadFilesDefaultImplementation(Exception exceptionLocalVar, string pathFormatLocalVar, string pathLocalVar, List files) + { + bool suppressDefaultLogLocalVar = false; + OnErrorUploadFiles(ref suppressDefaultLogLocalVar, exceptionLocalVar, pathFormatLocalVar, pathLocalVar, files); + if (!suppressDefaultLogLocalVar) + Logger.LogError(exceptionLocalVar, "An error occurred while sending the request to the server."); + } + + /// + /// A partial method that gives developers a way to provide customized exception handling + /// + /// + /// + /// + /// + /// + partial void OnErrorUploadFiles(ref bool suppressDefaultLogLocalVar, Exception exceptionLocalVar, string pathFormatLocalVar, string pathLocalVar, List files); + + /// + /// Upload multiple files + /// + /// + /// Cancellation Token to cancel the request. + /// <> + public async Task UploadFilesOrDefaultAsync(List files, System.Threading.CancellationToken cancellationToken = default) + { + try + { + return await UploadFilesAsync(files, cancellationToken).ConfigureAwait(false); + } + catch (Exception) + { + return null; + } + } + + /// + /// Upload multiple files + /// + /// Thrown when fails to make API call + /// + /// Cancellation Token to cancel the request. + /// <> + public async Task UploadFilesAsync(List files, System.Threading.CancellationToken cancellationToken = default) + { + UriBuilder uriBuilderLocalVar = new UriBuilder(); + + try + { + ValidateUploadFiles(files); + + FormatUploadFiles(files); + + using (HttpRequestMessage httpRequestMessageLocalVar = new HttpRequestMessage()) + { + uriBuilderLocalVar.Host = HttpClient.BaseAddress.Host; + uriBuilderLocalVar.Port = HttpClient.BaseAddress.Port; + uriBuilderLocalVar.Scheme = HttpClient.BaseAddress.Scheme; + uriBuilderLocalVar.Path = HttpClient.BaseAddress.AbsolutePath == "/" + ? "/upload" + : string.Concat(HttpClient.BaseAddress.AbsolutePath, "/upload"); + + MultipartContent multipartContentLocalVar = new MultipartContent(); + + httpRequestMessageLocalVar.Content = multipartContentLocalVar; + + List> formParameterLocalVars = new List>(); + + multipartContentLocalVar.Add(new FormUrlEncodedContent(formParameterLocalVars)); + + foreach (global::System.IO.Stream streamLocalVar in files) + { + 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); + } + + httpRequestMessageLocalVar.RequestUri = uriBuilderLocalVar.Uri; + + string[] contentTypes = new string[] { + "multipart/form-data" + }; + + string contentTypeLocalVar = ClientUtils.SelectHeaderContentType(contentTypes); + + if (contentTypeLocalVar != null && httpRequestMessageLocalVar.Content != null) + httpRequestMessageLocalVar.Content.Headers.ContentType = new MediaTypeHeaderValue(contentTypeLocalVar); + + string[] acceptLocalVars = new string[] { + "application/json" + }; + + string acceptLocalVar = ClientUtils.SelectHeaderAccept(acceptLocalVars); + + if (acceptLocalVar != null) + httpRequestMessageLocalVar.Headers.Accept.Add(new MediaTypeWithQualityHeaderValue(acceptLocalVar)); + httpRequestMessageLocalVar.Method = new HttpMethod("POST"); + + DateTime requestedAtLocalVar = DateTime.UtcNow; + + using (HttpResponseMessage httpResponseMessageLocalVar = await HttpClient.SendAsync(httpRequestMessageLocalVar, cancellationToken).ConfigureAwait(false)) + { + string responseContentLocalVar = await httpResponseMessageLocalVar.Content.ReadAsStringAsync().ConfigureAwait(false); + + ILogger apiResponseLoggerLocalVar = LoggerFactory.CreateLogger(); + + UploadFilesApiResponse apiResponseLocalVar = new UploadFilesApiResponse(apiResponseLoggerLocalVar, httpRequestMessageLocalVar, httpResponseMessageLocalVar, responseContentLocalVar, "/upload", requestedAtLocalVar, _jsonSerializerOptions); + + AfterUploadFilesDefaultImplementation(apiResponseLocalVar, files); + + Events.ExecuteOnUploadFiles(apiResponseLocalVar); + + return apiResponseLocalVar; + } + } + } + catch(Exception e) + { + OnErrorUploadFilesDefaultImplementation(e, "/upload", uriBuilderLocalVar.Path, files); + Events.ExecuteOnErrorUploadFiles(e); + throw; + } + } + + /// + /// The + /// + public partial class UploadFilesApiResponse : Org.OpenAPITools.Client.ApiResponse, IUploadFilesApiResponse + { + /// + /// The logger + /// + public ILogger Logger { get; } + + /// + /// The + /// + /// + /// + /// + /// + /// + /// + /// + public UploadFilesApiResponse(ILogger logger, System.Net.Http.HttpRequestMessage httpRequestMessage, System.Net.Http.HttpResponseMessage httpResponseMessage, string rawContent, string path, DateTime requestedAt, System.Text.Json.JsonSerializerOptions jsonSerializerOptions) : base(httpRequestMessage, httpResponseMessage, rawContent, path, requestedAt, jsonSerializerOptions) + { + Logger = logger; + OnCreated(httpRequestMessage, httpResponseMessage); + } + + partial void OnCreated(global::System.Net.Http.HttpRequestMessage httpRequestMessage, System.Net.Http.HttpResponseMessage httpResponseMessage); + + /// + /// Returns true if the response is 200 Ok + /// + /// + public bool IsOk => 200 == (int)StatusCode; + + /// + /// Deserializes the response if the response is 200 Ok + /// + /// + public Org.OpenAPITools.Model.UploadFiles200Response Ok() + { + // This logic may be modified with the AsModel.mustache template + return IsOk + ? System.Text.Json.JsonSerializer.Deserialize(RawContent, _jsonSerializerOptions) + : default; + } + + /// + /// Returns true if the response is 200 Ok and the deserialized response is not null + /// + /// + /// + public bool TryOk(out Org.OpenAPITools.Model.UploadFiles200Response result) + { + result = null; + + try + { + result = Ok(); + } catch (Exception e) + { + OnDeserializationErrorDefaultImplementation(e, (HttpStatusCode)200); + } + + return result != null; + } + + private void OnDeserializationErrorDefaultImplementation(Exception exception, HttpStatusCode httpStatusCode) + { + bool suppressDefaultLog = false; + OnDeserializationError(ref suppressDefaultLog, exception, httpStatusCode); + if (!suppressDefaultLog) + Logger.LogError(exception, "An error occurred while deserializing the {code} response.", httpStatusCode); + } + + partial void OnDeserializationError(ref bool suppressDefaultLog, Exception exception, HttpStatusCode httpStatusCode); + } } } diff --git a/samples/client/petstore/csharp/generichost/net4.8/Petstore/src/Org.OpenAPITools/Api/FakeApi.cs b/samples/client/petstore/csharp/generichost/net4.8/Petstore/src/Org.OpenAPITools/Api/FakeApi.cs index b5bd0071572b..20ad985082fe 100644 --- a/samples/client/petstore/csharp/generichost/net4.8/Petstore/src/Org.OpenAPITools/Api/FakeApi.cs +++ b/samples/client/petstore/csharp/generichost/net4.8/Petstore/src/Org.OpenAPITools/Api/FakeApi.cs @@ -4024,7 +4024,6 @@ public async Task TestEndpointParametersAsyn if (binary.IsSet) multipartContentLocalVar.Add(new StreamContent(binary.Value)); - if (callback.IsSet) formParameterLocalVars.Add(new KeyValuePair("callback", ClientUtils.ParameterToString(callback.Value))); @@ -4346,7 +4345,9 @@ public async Task TestEnumParametersAsync(Option List> formParameterLocalVars = new List>(); - multipartContentLocalVar.Add(new FormUrlEncodedContent(formParameterLocalVars)); if (enumFormString.IsSet) + multipartContentLocalVar.Add(new FormUrlEncodedContent(formParameterLocalVars)); + + if (enumFormString.IsSet) formParameterLocalVars.Add(new KeyValuePair("enum_form_string", ClientUtils.ParameterToString(enumFormString.Value))); if (enumFormStringArray.IsSet) diff --git a/samples/client/petstore/csharp/generichost/net4.8/Petstore/src/Org.OpenAPITools/Api/PetApi.cs b/samples/client/petstore/csharp/generichost/net4.8/Petstore/src/Org.OpenAPITools/Api/PetApi.cs index e6b74ca5d574..b83decd72785 100644 --- a/samples/client/petstore/csharp/generichost/net4.8/Petstore/src/Org.OpenAPITools/Api/PetApi.cs +++ b/samples/client/petstore/csharp/generichost/net4.8/Petstore/src/Org.OpenAPITools/Api/PetApi.cs @@ -2198,7 +2198,9 @@ public async Task UpdatePetWithFormAsync(long pet List> formParameterLocalVars = new List>(); - multipartContentLocalVar.Add(new FormUrlEncodedContent(formParameterLocalVars)); if (name.IsSet) + multipartContentLocalVar.Add(new FormUrlEncodedContent(formParameterLocalVars)); + + if (name.IsSet) formParameterLocalVars.Add(new KeyValuePair("name", ClientUtils.ParameterToString(name.Value))); if (status.IsSet) @@ -2425,12 +2427,13 @@ public async Task UploadFileAsync(long petId, Option> formParameterLocalVars = new List>(); - multipartContentLocalVar.Add(new FormUrlEncodedContent(formParameterLocalVars)); if (additionalMetadata.IsSet) + multipartContentLocalVar.Add(new FormUrlEncodedContent(formParameterLocalVars)); + + if (additionalMetadata.IsSet) formParameterLocalVars.Add(new KeyValuePair("additionalMetadata", ClientUtils.ParameterToString(additionalMetadata.Value))); if (file.IsSet) multipartContentLocalVar.Add(new StreamContent(file.Value)); - List tokenBaseLocalVars = new List(); httpRequestMessageLocalVar.RequestUri = uriBuilderLocalVar.Uri; @@ -2692,7 +2695,9 @@ public async Task UploadFileWithRequired List> formParameterLocalVars = new List>(); - multipartContentLocalVar.Add(new FormUrlEncodedContent(formParameterLocalVars)); multipartContentLocalVar.Add(new StreamContent(requiredFile)); + multipartContentLocalVar.Add(new FormUrlEncodedContent(formParameterLocalVars)); + + multipartContentLocalVar.Add(new StreamContent(requiredFile)); if (additionalMetadata.IsSet) formParameterLocalVars.Add(new KeyValuePair("additionalMetadata", ClientUtils.ParameterToString(additionalMetadata.Value))); diff --git a/samples/client/petstore/csharp/generichost/net4.8/Petstore/src/Org.OpenAPITools/Client/HostConfiguration.cs b/samples/client/petstore/csharp/generichost/net4.8/Petstore/src/Org.OpenAPITools/Client/HostConfiguration.cs index 5d658ec3769d..3196d6c9131b 100644 --- a/samples/client/petstore/csharp/generichost/net4.8/Petstore/src/Org.OpenAPITools/Client/HostConfiguration.cs +++ b/samples/client/petstore/csharp/generichost/net4.8/Petstore/src/Org.OpenAPITools/Client/HostConfiguration.cs @@ -144,6 +144,7 @@ public HostConfiguration(IServiceCollection services) _jsonOptions.Converters.Add(new TestResultCodeNullableJsonConverter()); _jsonOptions.Converters.Add(new TriangleJsonConverter()); _jsonOptions.Converters.Add(new TriangleInterfaceJsonConverter()); + _jsonOptions.Converters.Add(new UploadFiles200ResponseJsonConverter()); _jsonOptions.Converters.Add(new UserJsonConverter()); _jsonOptions.Converters.Add(new WhaleJsonConverter()); _jsonOptions.Converters.Add(new ZebraJsonConverter()); diff --git a/samples/client/petstore/csharp/generichost/net4.8/Petstore/src/Org.OpenAPITools/Model/UploadFiles200Response.cs b/samples/client/petstore/csharp/generichost/net4.8/Petstore/src/Org.OpenAPITools/Model/UploadFiles200Response.cs new file mode 100644 index 000000000000..9166257e1cbe --- /dev/null +++ b/samples/client/petstore/csharp/generichost/net4.8/Petstore/src/Org.OpenAPITools/Model/UploadFiles200Response.cs @@ -0,0 +1,200 @@ +// +/* + * OpenAPI Petstore + * + * This spec is mainly for testing Petstore server and contains fake endpoints, models. Please do not use this for any other purpose. Special characters: \" \\ + * + * The version of the OpenAPI document: 1.0.0 + * Generated by: https://github.com/openapitools/openapi-generator.git + */ + +using System; +using System.Collections; +using System.Collections.Generic; +using System.Collections.ObjectModel; +using System.Linq; +using System.IO; +using System.Text; +using System.Text.RegularExpressions; +using System.Text.Json; +using System.Text.Json.Serialization; +using System.ComponentModel.DataAnnotations; +using OpenAPIClientUtils = Org.OpenAPITools.Client.ClientUtils; +using Org.OpenAPITools.Client; + +namespace Org.OpenAPITools.Model +{ + /// + /// UploadFiles200Response + /// + public partial class UploadFiles200Response : IValidatableObject + { + /// + /// Initializes a new instance of the class. + /// + /// fileCount + /// message + [JsonConstructor] + public UploadFiles200Response(Option fileCount = default, Option message = default) + { + FileCountOption = fileCount; + MessageOption = message; + OnCreated(); + } + + partial void OnCreated(); + + /// + /// Used to track the state of FileCount + /// + [JsonIgnore] + [global::System.ComponentModel.EditorBrowsable(global::System.ComponentModel.EditorBrowsableState.Never)] + public Option FileCountOption { get; private set; } + + /// + /// Gets or Sets FileCount + /// + [JsonPropertyName("fileCount")] + public int? FileCount { get { return this.FileCountOption; } set { this.FileCountOption = new Option(value); } } + + /// + /// Used to track the state of Message + /// + [JsonIgnore] + [global::System.ComponentModel.EditorBrowsable(global::System.ComponentModel.EditorBrowsableState.Never)] + public Option MessageOption { get; private set; } + + /// + /// Gets or Sets Message + /// + [JsonPropertyName("message")] + public string Message { get { return this.MessageOption; } set { this.MessageOption = new Option(value); } } + + /// + /// Gets or Sets additional properties + /// + [JsonExtensionData] + public Dictionary AdditionalProperties { get; } = new Dictionary(); + + /// + /// Returns the string presentation of the object + /// + /// String presentation of the object + public override string ToString() + { + StringBuilder sb = new StringBuilder(); + sb.Append("class UploadFiles200Response {\n"); + sb.Append(" FileCount: ").Append(FileCount).Append("\n"); + sb.Append(" Message: ").Append(Message).Append("\n"); + sb.Append(" AdditionalProperties: ").Append(AdditionalProperties).Append("\n"); + sb.Append("}\n"); + return sb.ToString(); + } + + /// + /// To validate all properties of the instance + /// + /// Validation context + /// Validation Result + IEnumerable IValidatableObject.Validate(ValidationContext validationContext) + { + yield break; + } + } + + /// + /// A Json converter for type + /// + public class UploadFiles200ResponseJsonConverter : JsonConverter + { + /// + /// Deserializes json to + /// + /// + /// + /// + /// + /// + public override UploadFiles200Response Read(ref Utf8JsonReader utf8JsonReader, Type typeToConvert, JsonSerializerOptions jsonSerializerOptions) + { + int currentDepth = utf8JsonReader.CurrentDepth; + + if (utf8JsonReader.TokenType != JsonTokenType.StartObject && utf8JsonReader.TokenType != JsonTokenType.StartArray) + throw new JsonException(); + + JsonTokenType startingTokenType = utf8JsonReader.TokenType; + + Option fileCount = default; + Option message = default; + + while (utf8JsonReader.Read()) + { + if (startingTokenType == JsonTokenType.StartObject && utf8JsonReader.TokenType == JsonTokenType.EndObject && currentDepth == utf8JsonReader.CurrentDepth) + break; + + if (startingTokenType == JsonTokenType.StartArray && utf8JsonReader.TokenType == JsonTokenType.EndArray && currentDepth == utf8JsonReader.CurrentDepth) + break; + + if (utf8JsonReader.TokenType == JsonTokenType.PropertyName && currentDepth == utf8JsonReader.CurrentDepth - 1) + { + string localVarJsonPropertyName = utf8JsonReader.GetString(); + utf8JsonReader.Read(); + + switch (localVarJsonPropertyName) + { + case "fileCount": + fileCount = new Option(utf8JsonReader.TokenType == JsonTokenType.Null ? (int?)null : utf8JsonReader.GetInt32()); + break; + case "message": + message = new Option(utf8JsonReader.GetString()); + break; + default: + break; + } + } + } + + if (fileCount.IsSet && fileCount.Value == null) + throw new ArgumentNullException(nameof(fileCount), "Property is not nullable for class UploadFiles200Response."); + + if (message.IsSet && message.Value == null) + throw new ArgumentNullException(nameof(message), "Property is not nullable for class UploadFiles200Response."); + + return new UploadFiles200Response(fileCount, message); + } + + /// + /// Serializes a + /// + /// + /// + /// + /// + public override void Write(Utf8JsonWriter writer, UploadFiles200Response uploadFiles200Response, JsonSerializerOptions jsonSerializerOptions) + { + writer.WriteStartObject(); + + WriteProperties(writer, uploadFiles200Response, jsonSerializerOptions); + writer.WriteEndObject(); + } + + /// + /// Serializes the properties of + /// + /// + /// + /// + /// + public void WriteProperties(Utf8JsonWriter writer, UploadFiles200Response uploadFiles200Response, JsonSerializerOptions jsonSerializerOptions) + { + if (uploadFiles200Response.MessageOption.IsSet && uploadFiles200Response.Message == null) + throw new ArgumentNullException(nameof(uploadFiles200Response.Message), "Property is required for class UploadFiles200Response."); + + if (uploadFiles200Response.FileCountOption.IsSet) + writer.WriteNumber("fileCount", uploadFiles200Response.FileCountOption.Value.Value); + + if (uploadFiles200Response.MessageOption.IsSet) + writer.WriteString("message", uploadFiles200Response.Message); + } + } +} diff --git a/samples/client/petstore/csharp/generichost/net4.8/Petstore/src/Org.OpenAPITools/README.md b/samples/client/petstore/csharp/generichost/net4.8/Petstore/src/Org.OpenAPITools/README.md index 80f8c6bea340..c4d7b255ae76 100644 --- a/samples/client/petstore/csharp/generichost/net4.8/Petstore/src/Org.OpenAPITools/README.md +++ b/samples/client/petstore/csharp/generichost/net4.8/Petstore/src/Org.OpenAPITools/README.md @@ -115,5 +115,5 @@ namespace YourProject This C# SDK is automatically generated by the [OpenAPI Generator](https://openapi-generator.tech) project. - SDK version: 1.0.0 -- Generator version: 7.14.0-SNAPSHOT +- Generator version: 7.14.0 - Build package: org.openapitools.codegen.languages.CSharpClientCodegen diff --git a/samples/client/petstore/csharp/generichost/net4.8/UseDateTimeForDate/.openapi-generator/VERSION b/samples/client/petstore/csharp/generichost/net4.8/UseDateTimeForDate/.openapi-generator/VERSION index 4c631cf217a2..e465da43155f 100644 --- a/samples/client/petstore/csharp/generichost/net4.8/UseDateTimeForDate/.openapi-generator/VERSION +++ b/samples/client/petstore/csharp/generichost/net4.8/UseDateTimeForDate/.openapi-generator/VERSION @@ -1 +1 @@ -7.14.0-SNAPSHOT +7.14.0 diff --git a/samples/client/petstore/csharp/generichost/net4.8/UseDateTimeForDate/src/Org.OpenAPITools/README.md b/samples/client/petstore/csharp/generichost/net4.8/UseDateTimeForDate/src/Org.OpenAPITools/README.md index a0d8c3bbdab1..a143d752060f 100644 --- a/samples/client/petstore/csharp/generichost/net4.8/UseDateTimeForDate/src/Org.OpenAPITools/README.md +++ b/samples/client/petstore/csharp/generichost/net4.8/UseDateTimeForDate/src/Org.OpenAPITools/README.md @@ -107,5 +107,5 @@ namespace YourProject This C# SDK is automatically generated by the [OpenAPI Generator](https://openapi-generator.tech) project. - SDK version: 1.0.0 -- Generator version: 7.14.0-SNAPSHOT +- Generator version: 7.14.0 - Build package: org.openapitools.codegen.languages.CSharpClientCodegen diff --git a/samples/client/petstore/csharp/generichost/net8/AllOf/.openapi-generator/VERSION b/samples/client/petstore/csharp/generichost/net8/AllOf/.openapi-generator/VERSION index 4c631cf217a2..e465da43155f 100644 --- a/samples/client/petstore/csharp/generichost/net8/AllOf/.openapi-generator/VERSION +++ b/samples/client/petstore/csharp/generichost/net8/AllOf/.openapi-generator/VERSION @@ -1 +1 @@ -7.14.0-SNAPSHOT +7.14.0 diff --git a/samples/client/petstore/csharp/generichost/net8/AllOf/src/Org.OpenAPITools/README.md b/samples/client/petstore/csharp/generichost/net8/AllOf/src/Org.OpenAPITools/README.md index 08b187dece73..fe1cf043acb2 100644 --- a/samples/client/petstore/csharp/generichost/net8/AllOf/src/Org.OpenAPITools/README.md +++ b/samples/client/petstore/csharp/generichost/net8/AllOf/src/Org.OpenAPITools/README.md @@ -107,5 +107,5 @@ namespace YourProject This C# SDK is automatically generated by the [OpenAPI Generator](https://openapi-generator.tech) project. - SDK version: 1.0.0 -- Generator version: 7.14.0-SNAPSHOT +- Generator version: 7.14.0 - Build package: org.openapitools.codegen.languages.CSharpClientCodegen diff --git a/samples/client/petstore/csharp/generichost/net8/AnyOf/.openapi-generator/VERSION b/samples/client/petstore/csharp/generichost/net8/AnyOf/.openapi-generator/VERSION index 4c631cf217a2..e465da43155f 100644 --- a/samples/client/petstore/csharp/generichost/net8/AnyOf/.openapi-generator/VERSION +++ b/samples/client/petstore/csharp/generichost/net8/AnyOf/.openapi-generator/VERSION @@ -1 +1 @@ -7.14.0-SNAPSHOT +7.14.0 diff --git a/samples/client/petstore/csharp/generichost/net8/AnyOf/src/Org.OpenAPITools/README.md b/samples/client/petstore/csharp/generichost/net8/AnyOf/src/Org.OpenAPITools/README.md index 046e4088b567..8bfbb354edab 100644 --- a/samples/client/petstore/csharp/generichost/net8/AnyOf/src/Org.OpenAPITools/README.md +++ b/samples/client/petstore/csharp/generichost/net8/AnyOf/src/Org.OpenAPITools/README.md @@ -107,5 +107,5 @@ namespace YourProject This C# SDK is automatically generated by the [OpenAPI Generator](https://openapi-generator.tech) project. - SDK version: 1.0.0 -- Generator version: 7.14.0-SNAPSHOT +- Generator version: 7.14.0 - Build package: org.openapitools.codegen.languages.CSharpClientCodegen diff --git a/samples/client/petstore/csharp/generichost/net8/AnyOfNoCompare/.openapi-generator/VERSION b/samples/client/petstore/csharp/generichost/net8/AnyOfNoCompare/.openapi-generator/VERSION index 4c631cf217a2..e465da43155f 100644 --- a/samples/client/petstore/csharp/generichost/net8/AnyOfNoCompare/.openapi-generator/VERSION +++ b/samples/client/petstore/csharp/generichost/net8/AnyOfNoCompare/.openapi-generator/VERSION @@ -1 +1 @@ -7.14.0-SNAPSHOT +7.14.0 diff --git a/samples/client/petstore/csharp/generichost/net8/AnyOfNoCompare/src/Org.OpenAPITools/README.md b/samples/client/petstore/csharp/generichost/net8/AnyOfNoCompare/src/Org.OpenAPITools/README.md index 046e4088b567..8bfbb354edab 100644 --- a/samples/client/petstore/csharp/generichost/net8/AnyOfNoCompare/src/Org.OpenAPITools/README.md +++ b/samples/client/petstore/csharp/generichost/net8/AnyOfNoCompare/src/Org.OpenAPITools/README.md @@ -107,5 +107,5 @@ namespace YourProject This C# SDK is automatically generated by the [OpenAPI Generator](https://openapi-generator.tech) project. - SDK version: 1.0.0 -- Generator version: 7.14.0-SNAPSHOT +- Generator version: 7.14.0 - Build package: org.openapitools.codegen.languages.CSharpClientCodegen diff --git a/samples/client/petstore/csharp/generichost/net8/FormModels/.openapi-generator/FILES b/samples/client/petstore/csharp/generichost/net8/FormModels/.openapi-generator/FILES index 8062853cee64..f59db8bca5c1 100644 --- a/samples/client/petstore/csharp/generichost/net8/FormModels/.openapi-generator/FILES +++ b/samples/client/petstore/csharp/generichost/net8/FormModels/.openapi-generator/FILES @@ -130,6 +130,7 @@ docs/models/TestResult.md docs/models/TestResultCode.md docs/models/Triangle.md docs/models/TriangleInterface.md +docs/models/UploadFiles200Response.md docs/models/User.md docs/models/Whale.md docs/models/Zebra.md @@ -140,6 +141,7 @@ docs/models/ZeroBasedEnumClassZeroBasedEnum.md docs/scripts/git_push.ps1 docs/scripts/git_push.sh src/Org.OpenAPITools.Test/Api/DependencyInjectionTests.cs +src/Org.OpenAPITools.Test/Model/UploadFiles200ResponseTests.cs src/Org.OpenAPITools.Test/Org.OpenAPITools.Test.csproj src/Org.OpenAPITools.Test/README.md src/Org.OpenAPITools/Api/AnotherFakeApi.cs @@ -297,6 +299,7 @@ src/Org.OpenAPITools/Model/TestResult.cs src/Org.OpenAPITools/Model/TestResultCode.cs src/Org.OpenAPITools/Model/Triangle.cs src/Org.OpenAPITools/Model/TriangleInterface.cs +src/Org.OpenAPITools/Model/UploadFiles200Response.cs src/Org.OpenAPITools/Model/User.cs src/Org.OpenAPITools/Model/Whale.cs src/Org.OpenAPITools/Model/Zebra.cs diff --git a/samples/client/petstore/csharp/generichost/net8/FormModels/.openapi-generator/VERSION b/samples/client/petstore/csharp/generichost/net8/FormModels/.openapi-generator/VERSION index 4c631cf217a2..e465da43155f 100644 --- a/samples/client/petstore/csharp/generichost/net8/FormModels/.openapi-generator/VERSION +++ b/samples/client/petstore/csharp/generichost/net8/FormModels/.openapi-generator/VERSION @@ -1 +1 @@ -7.14.0-SNAPSHOT +7.14.0 diff --git a/samples/client/petstore/csharp/generichost/net8/FormModels/api/openapi.yaml b/samples/client/petstore/csharp/generichost/net8/FormModels/api/openapi.yaml index 3afd9359ab7d..4bd9bd7aa5fa 100644 --- a/samples/client/petstore/csharp/generichost/net8/FormModels/api/openapi.yaml +++ b/samples/client/petstore/csharp/generichost/net8/FormModels/api/openapi.yaml @@ -41,6 +41,23 @@ tags: - description: Operations about user name: user paths: + /upload: + post: + operationId: uploadFiles + requestBody: + content: + multipart/form-data: + schema: + $ref: "#/components/schemas/uploadFiles_request" + required: true + responses: + "200": + content: + application/json: + schema: + $ref: "#/components/schemas/uploadFiles_200_response" + description: Files uploaded successfully + summary: Upload multiple files /roles/report: get: responses: @@ -2684,6 +2701,26 @@ components: - APPROVED - MANUAL_APPROVAL_REQUIRED type: string + uploadFiles_request: + properties: + files: + items: + format: binary + type: string + type: array + required: + - files + type: object + uploadFiles_200_response: + example: + message: message + fileCount: 0 + properties: + message: + type: string + fileCount: + type: integer + type: object _foo_get_default_response: example: string: diff --git a/samples/client/petstore/csharp/generichost/net8/FormModels/docs/apis/DefaultApi.md b/samples/client/petstore/csharp/generichost/net8/FormModels/docs/apis/DefaultApi.md index e97541b8b6a5..0fa36d06dcaf 100644 --- a/samples/client/petstore/csharp/generichost/net8/FormModels/docs/apis/DefaultApi.md +++ b/samples/client/petstore/csharp/generichost/net8/FormModels/docs/apis/DefaultApi.md @@ -9,6 +9,7 @@ All URIs are relative to *http://petstore.swagger.io:80/v2* | [**Hello**](DefaultApi.md#hello) | **GET** /hello | Hello | | [**RolesReportGet**](DefaultApi.md#rolesreportget) | **GET** /roles/report | | | [**Test**](DefaultApi.md#test) | **GET** /test | Retrieve an existing Notificationtest's Elements | +| [**UploadFiles**](DefaultApi.md#uploadfiles) | **POST** /upload | Upload multiple files | # **FooGet** @@ -166,3 +167,37 @@ No authorization required [[Back to top]](#) [[Back to API list]](../../README.md#documentation-for-api-endpoints) [[Back to Model list]](../../README.md#documentation-for-models) [[Back to README]](../../README.md) + +# **UploadFiles** +> UploadFiles200Response UploadFiles (List files) + +Upload multiple files + + +### Parameters + +| Name | Type | Description | Notes | +|------|------|-------------|-------| +| **files** | **List<System.IO.Stream>** | | | + +### Return type + +[**UploadFiles200Response**](UploadFiles200Response.md) + +### Authorization + +No authorization required + +### HTTP request headers + + - **Content-Type**: multipart/form-data + - **Accept**: application/json + + +### HTTP response details +| Status code | Description | Response headers | +|-------------|-------------|------------------| +| **200** | Files uploaded successfully | - | + +[[Back to top]](#) [[Back to API list]](../../README.md#documentation-for-api-endpoints) [[Back to Model list]](../../README.md#documentation-for-models) [[Back to README]](../../README.md) + diff --git a/samples/client/petstore/csharp/generichost/net8/FormModels/docs/models/UploadFiles200Response.md b/samples/client/petstore/csharp/generichost/net8/FormModels/docs/models/UploadFiles200Response.md new file mode 100644 index 000000000000..8e32fc151b34 --- /dev/null +++ b/samples/client/petstore/csharp/generichost/net8/FormModels/docs/models/UploadFiles200Response.md @@ -0,0 +1,11 @@ +# Org.OpenAPITools.Model.UploadFiles200Response + +## Properties + +Name | Type | Description | Notes +------------ | ------------- | ------------- | ------------- +**FileCount** | **int** | | [optional] +**Message** | **string** | | [optional] + +[[Back to Model list]](../../README.md#documentation-for-models) [[Back to API list]](../../README.md#documentation-for-api-endpoints) [[Back to README]](../../README.md) + diff --git a/samples/client/petstore/csharp/generichost/net8/FormModels/src/Org.OpenAPITools.Test/Model/UploadFiles200ResponseTests.cs b/samples/client/petstore/csharp/generichost/net8/FormModels/src/Org.OpenAPITools.Test/Model/UploadFiles200ResponseTests.cs new file mode 100644 index 000000000000..e6003ac29cfe --- /dev/null +++ b/samples/client/petstore/csharp/generichost/net8/FormModels/src/Org.OpenAPITools.Test/Model/UploadFiles200ResponseTests.cs @@ -0,0 +1,74 @@ +/* + * OpenAPI Petstore + * + * This spec is mainly for testing Petstore server and contains fake endpoints, models. Please do not use this for any other purpose. Special characters: \" \\ + * + * The version of the OpenAPI document: 1.0.0 + * Generated by: https://github.com/openapitools/openapi-generator.git + */ + + +using Xunit; + +using System; +using System.Linq; +using System.IO; +using System.Collections.Generic; +using Org.OpenAPITools.Model; +using Org.OpenAPITools.Client; +using System.Reflection; + +namespace Org.OpenAPITools.Test.Model +{ + /// + /// Class for testing UploadFiles200Response + /// + /// + /// This file is automatically generated by OpenAPI Generator (https://openapi-generator.tech). + /// Please update the test case below to test the model. + /// + public class UploadFiles200ResponseTests : IDisposable + { + // TODO uncomment below to declare an instance variable for UploadFiles200Response + //private UploadFiles200Response instance; + + public UploadFiles200ResponseTests() + { + // TODO uncomment below to create an instance of UploadFiles200Response + //instance = new UploadFiles200Response(); + } + + public void Dispose() + { + // Cleanup when everything is done. + } + + /// + /// Test an instance of UploadFiles200Response + /// + [Fact] + public void UploadFiles200ResponseInstanceTest() + { + // TODO uncomment below to test "IsType" UploadFiles200Response + //Assert.IsType(instance); + } + + /// + /// Test the property 'FileCount' + /// + [Fact] + public void FileCountTest() + { + // TODO unit test for the property 'FileCount' + } + + /// + /// Test the property 'Message' + /// + [Fact] + public void MessageTest() + { + // TODO unit test for the property 'Message' + } + } +} diff --git a/samples/client/petstore/csharp/generichost/net8/FormModels/src/Org.OpenAPITools/Api/DefaultApi.cs b/samples/client/petstore/csharp/generichost/net8/FormModels/src/Org.OpenAPITools/Api/DefaultApi.cs index b26e51c70f3b..b3303666acac 100644 --- a/samples/client/petstore/csharp/generichost/net8/FormModels/src/Org.OpenAPITools/Api/DefaultApi.cs +++ b/samples/client/petstore/csharp/generichost/net8/FormModels/src/Org.OpenAPITools/Api/DefaultApi.cs @@ -139,6 +139,29 @@ public interface IDefaultApi : IApi /// Cancellation Token to cancel the request. /// <> Task TestOrDefaultAsync(System.Threading.CancellationToken cancellationToken = default); + + /// + /// Upload multiple files + /// + /// + /// + /// + /// Thrown when fails to make API call + /// + /// Cancellation Token to cancel the request. + /// <> + Task UploadFilesAsync(List files, System.Threading.CancellationToken cancellationToken = default); + + /// + /// Upload multiple files + /// + /// + /// + /// + /// + /// Cancellation Token to cancel the request. + /// <> + Task UploadFilesOrDefaultAsync(List files, System.Threading.CancellationToken cancellationToken = default); } /// @@ -201,6 +224,18 @@ public interface ITestApiResponse : Org.OpenAPITools.Client.IApiResponse, IOk + /// The + /// + public interface IUploadFilesApiResponse : Org.OpenAPITools.Client.IApiResponse, IOk + { + /// + /// Returns true if the response is 200 Ok + /// + /// + bool IsOk { get; } + } + /// /// Represents a collection of functions to interact with the API endpoints /// @@ -305,6 +340,26 @@ internal void ExecuteOnErrorTest(Exception exception) { OnErrorTest?.Invoke(this, new ExceptionEventArgs(exception)); } + + /// + /// The event raised after the server response + /// + public event EventHandler OnUploadFiles; + + /// + /// The event raised after an error querying the server + /// + public event EventHandler OnErrorUploadFiles; + + internal void ExecuteOnUploadFiles(DefaultApi.UploadFilesApiResponse apiResponse) + { + OnUploadFiles?.Invoke(this, new ApiResponseEventArgs(apiResponse)); + } + + internal void ExecuteOnErrorUploadFiles(Exception exception) + { + OnErrorUploadFiles?.Invoke(this, new ExceptionEventArgs(exception)); + } } /// @@ -1362,5 +1417,252 @@ private void OnDeserializationErrorDefaultImplementation(Exception exception, Ht partial void OnDeserializationError(ref bool suppressDefaultLog, Exception exception, HttpStatusCode httpStatusCode); } + + partial void FormatUploadFiles(List files); + + /// + /// Validates the request parameters + /// + /// + /// + private void ValidateUploadFiles(List files) + { + if (files == null) + throw new ArgumentNullException(nameof(files)); + } + + /// + /// Processes the server response + /// + /// + /// + private void AfterUploadFilesDefaultImplementation(IUploadFilesApiResponse apiResponseLocalVar, List files) + { + bool suppressDefaultLog = false; + AfterUploadFiles(ref suppressDefaultLog, apiResponseLocalVar, files); + if (!suppressDefaultLog) + Logger.LogInformation("{0,-9} | {1} | {3}", (apiResponseLocalVar.DownloadedAt - apiResponseLocalVar.RequestedAt).TotalSeconds, apiResponseLocalVar.StatusCode, apiResponseLocalVar.Path); + } + + /// + /// Processes the server response + /// + /// + /// + /// + partial void AfterUploadFiles(ref bool suppressDefaultLog, IUploadFilesApiResponse apiResponseLocalVar, List files); + + /// + /// Logs exceptions that occur while retrieving the server response + /// + /// + /// + /// + /// + private void OnErrorUploadFilesDefaultImplementation(Exception exceptionLocalVar, string pathFormatLocalVar, string pathLocalVar, List files) + { + bool suppressDefaultLogLocalVar = false; + OnErrorUploadFiles(ref suppressDefaultLogLocalVar, exceptionLocalVar, pathFormatLocalVar, pathLocalVar, files); + if (!suppressDefaultLogLocalVar) + Logger.LogError(exceptionLocalVar, "An error occurred while sending the request to the server."); + } + + /// + /// A partial method that gives developers a way to provide customized exception handling + /// + /// + /// + /// + /// + /// + partial void OnErrorUploadFiles(ref bool suppressDefaultLogLocalVar, Exception exceptionLocalVar, string pathFormatLocalVar, string pathLocalVar, List files); + + /// + /// Upload multiple files + /// + /// + /// Cancellation Token to cancel the request. + /// <> + public async Task UploadFilesOrDefaultAsync(List files, System.Threading.CancellationToken cancellationToken = default) + { + try + { + return await UploadFilesAsync(files, cancellationToken).ConfigureAwait(false); + } + catch (Exception) + { + return null; + } + } + + /// + /// Upload multiple files + /// + /// Thrown when fails to make API call + /// + /// Cancellation Token to cancel the request. + /// <> + public async Task UploadFilesAsync(List files, System.Threading.CancellationToken cancellationToken = default) + { + UriBuilder uriBuilderLocalVar = new UriBuilder(); + + try + { + ValidateUploadFiles(files); + + FormatUploadFiles(files); + + using (HttpRequestMessage httpRequestMessageLocalVar = new HttpRequestMessage()) + { + uriBuilderLocalVar.Host = HttpClient.BaseAddress.Host; + uriBuilderLocalVar.Port = HttpClient.BaseAddress.Port; + uriBuilderLocalVar.Scheme = HttpClient.BaseAddress.Scheme; + uriBuilderLocalVar.Path = HttpClient.BaseAddress.AbsolutePath == "/" + ? "/upload" + : string.Concat(HttpClient.BaseAddress.AbsolutePath, "/upload"); + + MultipartContent multipartContentLocalVar = new MultipartContent(); + + httpRequestMessageLocalVar.Content = multipartContentLocalVar; + + List> formParameterLocalVars = new List>(); + + multipartContentLocalVar.Add(new FormUrlEncodedContent(formParameterLocalVars)); + + foreach (global::System.IO.Stream streamLocalVar in files) + { + 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); + } + + httpRequestMessageLocalVar.RequestUri = uriBuilderLocalVar.Uri; + + string[] contentTypes = new string[] { + "multipart/form-data" + }; + + string contentTypeLocalVar = ClientUtils.SelectHeaderContentType(contentTypes); + + if (contentTypeLocalVar != null && httpRequestMessageLocalVar.Content != null) + httpRequestMessageLocalVar.Content.Headers.ContentType = new MediaTypeHeaderValue(contentTypeLocalVar); + + string[] acceptLocalVars = new string[] { + "application/json" + }; + + string acceptLocalVar = ClientUtils.SelectHeaderAccept(acceptLocalVars); + + if (acceptLocalVar != null) + httpRequestMessageLocalVar.Headers.Accept.Add(new MediaTypeWithQualityHeaderValue(acceptLocalVar)); + + httpRequestMessageLocalVar.Method = HttpMethod.Post; + + DateTime requestedAtLocalVar = DateTime.UtcNow; + + using (HttpResponseMessage httpResponseMessageLocalVar = await HttpClient.SendAsync(httpRequestMessageLocalVar, cancellationToken).ConfigureAwait(false)) + { + string responseContentLocalVar = await httpResponseMessageLocalVar.Content.ReadAsStringAsync(cancellationToken).ConfigureAwait(false); + + ILogger apiResponseLoggerLocalVar = LoggerFactory.CreateLogger(); + + UploadFilesApiResponse apiResponseLocalVar = new(apiResponseLoggerLocalVar, httpRequestMessageLocalVar, httpResponseMessageLocalVar, responseContentLocalVar, "/upload", requestedAtLocalVar, _jsonSerializerOptions); + + AfterUploadFilesDefaultImplementation(apiResponseLocalVar, files); + + Events.ExecuteOnUploadFiles(apiResponseLocalVar); + + return apiResponseLocalVar; + } + } + } + catch(Exception e) + { + OnErrorUploadFilesDefaultImplementation(e, "/upload", uriBuilderLocalVar.Path, files); + Events.ExecuteOnErrorUploadFiles(e); + throw; + } + } + + /// + /// The + /// + public partial class UploadFilesApiResponse : Org.OpenAPITools.Client.ApiResponse, IUploadFilesApiResponse + { + /// + /// The logger + /// + public ILogger Logger { get; } + + /// + /// The + /// + /// + /// + /// + /// + /// + /// + /// + public UploadFilesApiResponse(ILogger logger, System.Net.Http.HttpRequestMessage httpRequestMessage, System.Net.Http.HttpResponseMessage httpResponseMessage, string rawContent, string path, DateTime requestedAt, System.Text.Json.JsonSerializerOptions jsonSerializerOptions) : base(httpRequestMessage, httpResponseMessage, rawContent, path, requestedAt, jsonSerializerOptions) + { + Logger = logger; + OnCreated(httpRequestMessage, httpResponseMessage); + } + + partial void OnCreated(global::System.Net.Http.HttpRequestMessage httpRequestMessage, System.Net.Http.HttpResponseMessage httpResponseMessage); + + /// + /// Returns true if the response is 200 Ok + /// + /// + public bool IsOk => 200 == (int)StatusCode; + + /// + /// Deserializes the response if the response is 200 Ok + /// + /// + public Org.OpenAPITools.Model.UploadFiles200Response Ok() + { + // This logic may be modified with the AsModel.mustache template + return IsOk + ? System.Text.Json.JsonSerializer.Deserialize(RawContent, _jsonSerializerOptions) + : null; + } + + /// + /// Returns true if the response is 200 Ok and the deserialized response is not null + /// + /// + /// + public bool TryOk([NotNullWhen(true)]out Org.OpenAPITools.Model.UploadFiles200Response result) + { + result = null; + + try + { + result = Ok(); + } catch (Exception e) + { + OnDeserializationErrorDefaultImplementation(e, (HttpStatusCode)200); + } + + return result != null; + } + + private void OnDeserializationErrorDefaultImplementation(Exception exception, HttpStatusCode httpStatusCode) + { + bool suppressDefaultLog = false; + OnDeserializationError(ref suppressDefaultLog, exception, httpStatusCode); + if (!suppressDefaultLog) + Logger.LogError(exception, "An error occurred while deserializing the {code} response.", httpStatusCode); + } + + partial void OnDeserializationError(ref bool suppressDefaultLog, Exception exception, HttpStatusCode httpStatusCode); + } } } diff --git a/samples/client/petstore/csharp/generichost/net8/FormModels/src/Org.OpenAPITools/Api/FakeApi.cs b/samples/client/petstore/csharp/generichost/net8/FormModels/src/Org.OpenAPITools/Api/FakeApi.cs index 43aa6ec43f9c..6efd9647c185 100644 --- a/samples/client/petstore/csharp/generichost/net8/FormModels/src/Org.OpenAPITools/Api/FakeApi.cs +++ b/samples/client/petstore/csharp/generichost/net8/FormModels/src/Org.OpenAPITools/Api/FakeApi.cs @@ -4033,7 +4033,6 @@ public async Task TestEndpointParametersAsyn if (binary.IsSet) multipartContentLocalVar.Add(new StreamContent(binary.Value)); - if (callback.IsSet) formParameterLocalVars.Add(new KeyValuePair("callback", ClientUtils.ParameterToString(callback.Value))); @@ -4343,7 +4342,9 @@ public async Task TestEnumParametersAsync(Option List> formParameterLocalVars = new List>(); - multipartContentLocalVar.Add(new FormUrlEncodedContent(formParameterLocalVars)); if (enumFormString.IsSet) + multipartContentLocalVar.Add(new FormUrlEncodedContent(formParameterLocalVars)); + + if (enumFormString.IsSet) formParameterLocalVars.Add(new KeyValuePair("enum_form_string", ClientUtils.ParameterToString(enumFormString.Value))); if (enumFormStringArray.IsSet) diff --git a/samples/client/petstore/csharp/generichost/net8/FormModels/src/Org.OpenAPITools/Api/PetApi.cs b/samples/client/petstore/csharp/generichost/net8/FormModels/src/Org.OpenAPITools/Api/PetApi.cs index 37ebd2fc29af..1a70ab2baf85 100644 --- a/samples/client/petstore/csharp/generichost/net8/FormModels/src/Org.OpenAPITools/Api/PetApi.cs +++ b/samples/client/petstore/csharp/generichost/net8/FormModels/src/Org.OpenAPITools/Api/PetApi.cs @@ -2202,7 +2202,9 @@ public async Task UpdatePetWithFormAsync(long pet List> formParameterLocalVars = new List>(); - multipartContentLocalVar.Add(new FormUrlEncodedContent(formParameterLocalVars)); if (name.IsSet) + multipartContentLocalVar.Add(new FormUrlEncodedContent(formParameterLocalVars)); + + if (name.IsSet) formParameterLocalVars.Add(new KeyValuePair("name", ClientUtils.ParameterToString(name.Value))); if (status.IsSet) @@ -2429,12 +2431,13 @@ public async Task UploadFileAsync(long petId, Option> formParameterLocalVars = new List>(); - multipartContentLocalVar.Add(new FormUrlEncodedContent(formParameterLocalVars)); if (additionalMetadata.IsSet) + multipartContentLocalVar.Add(new FormUrlEncodedContent(formParameterLocalVars)); + + if (additionalMetadata.IsSet) formParameterLocalVars.Add(new KeyValuePair("additionalMetadata", ClientUtils.ParameterToString(additionalMetadata.Value))); if (file.IsSet) multipartContentLocalVar.Add(new StreamContent(file.Value)); - List tokenBaseLocalVars = new List(); httpRequestMessageLocalVar.RequestUri = uriBuilderLocalVar.Uri; @@ -2697,7 +2700,9 @@ public async Task UploadFileWithRequired List> formParameterLocalVars = new List>(); - multipartContentLocalVar.Add(new FormUrlEncodedContent(formParameterLocalVars)); multipartContentLocalVar.Add(new StreamContent(requiredFile)); + multipartContentLocalVar.Add(new FormUrlEncodedContent(formParameterLocalVars)); + + multipartContentLocalVar.Add(new StreamContent(requiredFile)); if (additionalMetadata.IsSet) formParameterLocalVars.Add(new KeyValuePair("additionalMetadata", ClientUtils.ParameterToString(additionalMetadata.Value))); diff --git a/samples/client/petstore/csharp/generichost/net8/FormModels/src/Org.OpenAPITools/Client/HostConfiguration.cs b/samples/client/petstore/csharp/generichost/net8/FormModels/src/Org.OpenAPITools/Client/HostConfiguration.cs index 2c2b9348011f..d448ea1b4702 100644 --- a/samples/client/petstore/csharp/generichost/net8/FormModels/src/Org.OpenAPITools/Client/HostConfiguration.cs +++ b/samples/client/petstore/csharp/generichost/net8/FormModels/src/Org.OpenAPITools/Client/HostConfiguration.cs @@ -190,6 +190,7 @@ public HostConfiguration(IServiceCollection services) _jsonOptions.Converters.Add(new TestResultCodeNullableJsonConverter()); _jsonOptions.Converters.Add(new TriangleJsonConverter()); _jsonOptions.Converters.Add(new TriangleInterfaceJsonConverter()); + _jsonOptions.Converters.Add(new UploadFiles200ResponseJsonConverter()); _jsonOptions.Converters.Add(new UserJsonConverter()); _jsonOptions.Converters.Add(new WhaleJsonConverter()); _jsonOptions.Converters.Add(new ZebraJsonConverter()); diff --git a/samples/client/petstore/csharp/generichost/net8/FormModels/src/Org.OpenAPITools/Model/UploadFiles200Response.cs b/samples/client/petstore/csharp/generichost/net8/FormModels/src/Org.OpenAPITools/Model/UploadFiles200Response.cs new file mode 100644 index 000000000000..4dc38200f1ef --- /dev/null +++ b/samples/client/petstore/csharp/generichost/net8/FormModels/src/Org.OpenAPITools/Model/UploadFiles200Response.cs @@ -0,0 +1,200 @@ +// +/* + * OpenAPI Petstore + * + * This spec is mainly for testing Petstore server and contains fake endpoints, models. Please do not use this for any other purpose. Special characters: \" \\ + * + * The version of the OpenAPI document: 1.0.0 + * Generated by: https://github.com/openapitools/openapi-generator.git + */ + +using System; +using System.Collections; +using System.Collections.Generic; +using System.Collections.ObjectModel; +using System.Linq; +using System.IO; +using System.Text; +using System.Text.RegularExpressions; +using System.Text.Json; +using System.Text.Json.Serialization; +using System.ComponentModel.DataAnnotations; +using OpenAPIClientUtils = Org.OpenAPITools.Client.ClientUtils; +using Org.OpenAPITools.Client; + +namespace Org.OpenAPITools.Model +{ + /// + /// UploadFiles200Response + /// + public partial class UploadFiles200Response : IValidatableObject + { + /// + /// Initializes a new instance of the class. + /// + /// fileCount + /// message + [JsonConstructor] + public UploadFiles200Response(Option fileCount = default, Option message = default) + { + FileCountOption = fileCount; + MessageOption = message; + OnCreated(); + } + + partial void OnCreated(); + + /// + /// Used to track the state of FileCount + /// + [JsonIgnore] + [global::System.ComponentModel.EditorBrowsable(global::System.ComponentModel.EditorBrowsableState.Never)] + public Option FileCountOption { get; private set; } + + /// + /// Gets or Sets FileCount + /// + [JsonPropertyName("fileCount")] + public int? FileCount { get { return this.FileCountOption; } set { this.FileCountOption = new(value); } } + + /// + /// Used to track the state of Message + /// + [JsonIgnore] + [global::System.ComponentModel.EditorBrowsable(global::System.ComponentModel.EditorBrowsableState.Never)] + public Option MessageOption { get; private set; } + + /// + /// Gets or Sets Message + /// + [JsonPropertyName("message")] + public string Message { get { return this.MessageOption; } set { this.MessageOption = new(value); } } + + /// + /// Gets or Sets additional properties + /// + [JsonExtensionData] + public Dictionary AdditionalProperties { get; } = new Dictionary(); + + /// + /// Returns the string presentation of the object + /// + /// String presentation of the object + public override string ToString() + { + StringBuilder sb = new StringBuilder(); + sb.Append("class UploadFiles200Response {\n"); + sb.Append(" FileCount: ").Append(FileCount).Append("\n"); + sb.Append(" Message: ").Append(Message).Append("\n"); + sb.Append(" AdditionalProperties: ").Append(AdditionalProperties).Append("\n"); + sb.Append("}\n"); + return sb.ToString(); + } + + /// + /// To validate all properties of the instance + /// + /// Validation context + /// Validation Result + IEnumerable IValidatableObject.Validate(ValidationContext validationContext) + { + yield break; + } + } + + /// + /// A Json converter for type + /// + public class UploadFiles200ResponseJsonConverter : JsonConverter + { + /// + /// Deserializes json to + /// + /// + /// + /// + /// + /// + public override UploadFiles200Response Read(ref Utf8JsonReader utf8JsonReader, Type typeToConvert, JsonSerializerOptions jsonSerializerOptions) + { + int currentDepth = utf8JsonReader.CurrentDepth; + + if (utf8JsonReader.TokenType != JsonTokenType.StartObject && utf8JsonReader.TokenType != JsonTokenType.StartArray) + throw new JsonException(); + + JsonTokenType startingTokenType = utf8JsonReader.TokenType; + + Option fileCount = default; + Option message = default; + + while (utf8JsonReader.Read()) + { + if (startingTokenType == JsonTokenType.StartObject && utf8JsonReader.TokenType == JsonTokenType.EndObject && currentDepth == utf8JsonReader.CurrentDepth) + break; + + if (startingTokenType == JsonTokenType.StartArray && utf8JsonReader.TokenType == JsonTokenType.EndArray && currentDepth == utf8JsonReader.CurrentDepth) + break; + + if (utf8JsonReader.TokenType == JsonTokenType.PropertyName && currentDepth == utf8JsonReader.CurrentDepth - 1) + { + string localVarJsonPropertyName = utf8JsonReader.GetString(); + utf8JsonReader.Read(); + + switch (localVarJsonPropertyName) + { + case "fileCount": + fileCount = new Option(utf8JsonReader.TokenType == JsonTokenType.Null ? (int?)null : utf8JsonReader.GetInt32()); + break; + case "message": + message = new Option(utf8JsonReader.GetString()); + break; + default: + break; + } + } + } + + if (fileCount.IsSet && fileCount.Value == null) + throw new ArgumentNullException(nameof(fileCount), "Property is not nullable for class UploadFiles200Response."); + + if (message.IsSet && message.Value == null) + throw new ArgumentNullException(nameof(message), "Property is not nullable for class UploadFiles200Response."); + + return new UploadFiles200Response(fileCount, message); + } + + /// + /// Serializes a + /// + /// + /// + /// + /// + public override void Write(Utf8JsonWriter writer, UploadFiles200Response uploadFiles200Response, JsonSerializerOptions jsonSerializerOptions) + { + writer.WriteStartObject(); + + WriteProperties(writer, uploadFiles200Response, jsonSerializerOptions); + writer.WriteEndObject(); + } + + /// + /// Serializes the properties of + /// + /// + /// + /// + /// + public void WriteProperties(Utf8JsonWriter writer, UploadFiles200Response uploadFiles200Response, JsonSerializerOptions jsonSerializerOptions) + { + if (uploadFiles200Response.MessageOption.IsSet && uploadFiles200Response.Message == null) + throw new ArgumentNullException(nameof(uploadFiles200Response.Message), "Property is required for class UploadFiles200Response."); + + if (uploadFiles200Response.FileCountOption.IsSet) + writer.WriteNumber("fileCount", uploadFiles200Response.FileCountOption.Value.Value); + + if (uploadFiles200Response.MessageOption.IsSet) + writer.WriteString("message", uploadFiles200Response.Message); + } + } +} diff --git a/samples/client/petstore/csharp/generichost/net8/FormModels/src/Org.OpenAPITools/README.md b/samples/client/petstore/csharp/generichost/net8/FormModels/src/Org.OpenAPITools/README.md index 80f8c6bea340..c4d7b255ae76 100644 --- a/samples/client/petstore/csharp/generichost/net8/FormModels/src/Org.OpenAPITools/README.md +++ b/samples/client/petstore/csharp/generichost/net8/FormModels/src/Org.OpenAPITools/README.md @@ -115,5 +115,5 @@ namespace YourProject This C# SDK is automatically generated by the [OpenAPI Generator](https://openapi-generator.tech) project. - SDK version: 1.0.0 -- Generator version: 7.14.0-SNAPSHOT +- Generator version: 7.14.0 - Build package: org.openapitools.codegen.languages.CSharpClientCodegen diff --git a/samples/client/petstore/csharp/generichost/net8/NullReferenceTypes/.openapi-generator/FILES b/samples/client/petstore/csharp/generichost/net8/NullReferenceTypes/.openapi-generator/FILES index ab28c754b4b1..b1a86728dc6c 100644 --- a/samples/client/petstore/csharp/generichost/net8/NullReferenceTypes/.openapi-generator/FILES +++ b/samples/client/petstore/csharp/generichost/net8/NullReferenceTypes/.openapi-generator/FILES @@ -108,6 +108,7 @@ docs/models/TestResult.md docs/models/TestResultCode.md docs/models/Triangle.md docs/models/TriangleInterface.md +docs/models/UploadFiles200Response.md docs/models/User.md docs/models/Whale.md docs/models/Zebra.md @@ -116,6 +117,7 @@ docs/models/ZeroBasedEnumClass.md docs/scripts/git_push.ps1 docs/scripts/git_push.sh src/Org.OpenAPITools.Test/Api/DependencyInjectionTests.cs +src/Org.OpenAPITools.Test/Model/UploadFiles200ResponseTests.cs src/Org.OpenAPITools.Test/Org.OpenAPITools.Test.csproj src/Org.OpenAPITools.Test/README.md src/Org.OpenAPITools/Api/AnotherFakeApi.cs @@ -251,6 +253,7 @@ src/Org.OpenAPITools/Model/TestResult.cs src/Org.OpenAPITools/Model/TestResultCode.cs src/Org.OpenAPITools/Model/Triangle.cs src/Org.OpenAPITools/Model/TriangleInterface.cs +src/Org.OpenAPITools/Model/UploadFiles200Response.cs src/Org.OpenAPITools/Model/User.cs src/Org.OpenAPITools/Model/Whale.cs src/Org.OpenAPITools/Model/Zebra.cs diff --git a/samples/client/petstore/csharp/generichost/net8/NullReferenceTypes/.openapi-generator/VERSION b/samples/client/petstore/csharp/generichost/net8/NullReferenceTypes/.openapi-generator/VERSION index 4c631cf217a2..e465da43155f 100644 --- a/samples/client/petstore/csharp/generichost/net8/NullReferenceTypes/.openapi-generator/VERSION +++ b/samples/client/petstore/csharp/generichost/net8/NullReferenceTypes/.openapi-generator/VERSION @@ -1 +1 @@ -7.14.0-SNAPSHOT +7.14.0 diff --git a/samples/client/petstore/csharp/generichost/net8/NullReferenceTypes/api/openapi.yaml b/samples/client/petstore/csharp/generichost/net8/NullReferenceTypes/api/openapi.yaml index d86a1d2f6d87..276850a46bc1 100644 --- a/samples/client/petstore/csharp/generichost/net8/NullReferenceTypes/api/openapi.yaml +++ b/samples/client/petstore/csharp/generichost/net8/NullReferenceTypes/api/openapi.yaml @@ -41,6 +41,23 @@ tags: - description: Operations about user name: user paths: + /upload: + post: + operationId: uploadFiles + requestBody: + content: + multipart/form-data: + schema: + $ref: "#/components/schemas/uploadFiles_request" + required: true + responses: + "200": + content: + application/json: + schema: + $ref: "#/components/schemas/uploadFiles_200_response" + description: Files uploaded successfully + summary: Upload multiple files /roles/report: get: responses: @@ -2865,6 +2882,26 @@ components: - APPROVED - MANUAL_APPROVAL_REQUIRED type: string + uploadFiles_request: + properties: + files: + items: + format: binary + type: string + type: array + required: + - files + type: object + uploadFiles_200_response: + example: + message: message + fileCount: 0 + properties: + message: + type: string + fileCount: + type: integer + type: object _foo_get_default_response: example: string: diff --git a/samples/client/petstore/csharp/generichost/net8/NullReferenceTypes/docs/apis/DefaultApi.md b/samples/client/petstore/csharp/generichost/net8/NullReferenceTypes/docs/apis/DefaultApi.md index e97541b8b6a5..0fa36d06dcaf 100644 --- a/samples/client/petstore/csharp/generichost/net8/NullReferenceTypes/docs/apis/DefaultApi.md +++ b/samples/client/petstore/csharp/generichost/net8/NullReferenceTypes/docs/apis/DefaultApi.md @@ -9,6 +9,7 @@ All URIs are relative to *http://petstore.swagger.io:80/v2* | [**Hello**](DefaultApi.md#hello) | **GET** /hello | Hello | | [**RolesReportGet**](DefaultApi.md#rolesreportget) | **GET** /roles/report | | | [**Test**](DefaultApi.md#test) | **GET** /test | Retrieve an existing Notificationtest's Elements | +| [**UploadFiles**](DefaultApi.md#uploadfiles) | **POST** /upload | Upload multiple files | # **FooGet** @@ -166,3 +167,37 @@ No authorization required [[Back to top]](#) [[Back to API list]](../../README.md#documentation-for-api-endpoints) [[Back to Model list]](../../README.md#documentation-for-models) [[Back to README]](../../README.md) + +# **UploadFiles** +> UploadFiles200Response UploadFiles (List files) + +Upload multiple files + + +### Parameters + +| Name | Type | Description | Notes | +|------|------|-------------|-------| +| **files** | **List<System.IO.Stream>** | | | + +### Return type + +[**UploadFiles200Response**](UploadFiles200Response.md) + +### Authorization + +No authorization required + +### HTTP request headers + + - **Content-Type**: multipart/form-data + - **Accept**: application/json + + +### HTTP response details +| Status code | Description | Response headers | +|-------------|-------------|------------------| +| **200** | Files uploaded successfully | - | + +[[Back to top]](#) [[Back to API list]](../../README.md#documentation-for-api-endpoints) [[Back to Model list]](../../README.md#documentation-for-models) [[Back to README]](../../README.md) + diff --git a/samples/client/petstore/csharp/generichost/net8/NullReferenceTypes/docs/models/UploadFiles200Response.md b/samples/client/petstore/csharp/generichost/net8/NullReferenceTypes/docs/models/UploadFiles200Response.md new file mode 100644 index 000000000000..8e32fc151b34 --- /dev/null +++ b/samples/client/petstore/csharp/generichost/net8/NullReferenceTypes/docs/models/UploadFiles200Response.md @@ -0,0 +1,11 @@ +# Org.OpenAPITools.Model.UploadFiles200Response + +## Properties + +Name | Type | Description | Notes +------------ | ------------- | ------------- | ------------- +**FileCount** | **int** | | [optional] +**Message** | **string** | | [optional] + +[[Back to Model list]](../../README.md#documentation-for-models) [[Back to API list]](../../README.md#documentation-for-api-endpoints) [[Back to README]](../../README.md) + diff --git a/samples/client/petstore/csharp/generichost/net8/NullReferenceTypes/src/Org.OpenAPITools.Test/Model/UploadFiles200ResponseTests.cs b/samples/client/petstore/csharp/generichost/net8/NullReferenceTypes/src/Org.OpenAPITools.Test/Model/UploadFiles200ResponseTests.cs new file mode 100644 index 000000000000..e6003ac29cfe --- /dev/null +++ b/samples/client/petstore/csharp/generichost/net8/NullReferenceTypes/src/Org.OpenAPITools.Test/Model/UploadFiles200ResponseTests.cs @@ -0,0 +1,74 @@ +/* + * OpenAPI Petstore + * + * This spec is mainly for testing Petstore server and contains fake endpoints, models. Please do not use this for any other purpose. Special characters: \" \\ + * + * The version of the OpenAPI document: 1.0.0 + * Generated by: https://github.com/openapitools/openapi-generator.git + */ + + +using Xunit; + +using System; +using System.Linq; +using System.IO; +using System.Collections.Generic; +using Org.OpenAPITools.Model; +using Org.OpenAPITools.Client; +using System.Reflection; + +namespace Org.OpenAPITools.Test.Model +{ + /// + /// Class for testing UploadFiles200Response + /// + /// + /// This file is automatically generated by OpenAPI Generator (https://openapi-generator.tech). + /// Please update the test case below to test the model. + /// + public class UploadFiles200ResponseTests : IDisposable + { + // TODO uncomment below to declare an instance variable for UploadFiles200Response + //private UploadFiles200Response instance; + + public UploadFiles200ResponseTests() + { + // TODO uncomment below to create an instance of UploadFiles200Response + //instance = new UploadFiles200Response(); + } + + public void Dispose() + { + // Cleanup when everything is done. + } + + /// + /// Test an instance of UploadFiles200Response + /// + [Fact] + public void UploadFiles200ResponseInstanceTest() + { + // TODO uncomment below to test "IsType" UploadFiles200Response + //Assert.IsType(instance); + } + + /// + /// Test the property 'FileCount' + /// + [Fact] + public void FileCountTest() + { + // TODO unit test for the property 'FileCount' + } + + /// + /// Test the property 'Message' + /// + [Fact] + public void MessageTest() + { + // TODO unit test for the property 'Message' + } + } +} diff --git a/samples/client/petstore/csharp/generichost/net8/NullReferenceTypes/src/Org.OpenAPITools/Api/DefaultApi.cs b/samples/client/petstore/csharp/generichost/net8/NullReferenceTypes/src/Org.OpenAPITools/Api/DefaultApi.cs index 545c65127912..56f47ba8f94c 100644 --- a/samples/client/petstore/csharp/generichost/net8/NullReferenceTypes/src/Org.OpenAPITools/Api/DefaultApi.cs +++ b/samples/client/petstore/csharp/generichost/net8/NullReferenceTypes/src/Org.OpenAPITools/Api/DefaultApi.cs @@ -141,6 +141,29 @@ public interface IDefaultApi : IApi /// Cancellation Token to cancel the request. /// <?> Task TestOrDefaultAsync(System.Threading.CancellationToken cancellationToken = default); + + /// + /// Upload multiple files + /// + /// + /// + /// + /// Thrown when fails to make API call + /// + /// Cancellation Token to cancel the request. + /// <> + Task UploadFilesAsync(List files, System.Threading.CancellationToken cancellationToken = default); + + /// + /// Upload multiple files + /// + /// + /// + /// + /// + /// Cancellation Token to cancel the request. + /// <?> + Task UploadFilesOrDefaultAsync(List files, System.Threading.CancellationToken cancellationToken = default); } /// @@ -203,6 +226,18 @@ public interface ITestApiResponse : Org.OpenAPITools.Client.IApiResponse, IOk + /// The + /// + public interface IUploadFilesApiResponse : Org.OpenAPITools.Client.IApiResponse, IOk + { + /// + /// Returns true if the response is 200 Ok + /// + /// + bool IsOk { get; } + } + /// /// Represents a collection of functions to interact with the API endpoints /// @@ -307,6 +342,26 @@ internal void ExecuteOnErrorTest(Exception exception) { OnErrorTest?.Invoke(this, new ExceptionEventArgs(exception)); } + + /// + /// The event raised after the server response + /// + public event EventHandler? OnUploadFiles; + + /// + /// The event raised after an error querying the server + /// + public event EventHandler? OnErrorUploadFiles; + + internal void ExecuteOnUploadFiles(DefaultApi.UploadFilesApiResponse apiResponse) + { + OnUploadFiles?.Invoke(this, new ApiResponseEventArgs(apiResponse)); + } + + internal void ExecuteOnErrorUploadFiles(Exception exception) + { + OnErrorUploadFiles?.Invoke(this, new ExceptionEventArgs(exception)); + } } /// @@ -1364,5 +1419,252 @@ private void OnDeserializationErrorDefaultImplementation(Exception exception, Ht partial void OnDeserializationError(ref bool suppressDefaultLog, Exception exception, HttpStatusCode httpStatusCode); } + + partial void FormatUploadFiles(List files); + + /// + /// Validates the request parameters + /// + /// + /// + private void ValidateUploadFiles(List files) + { + if (files == null) + throw new ArgumentNullException(nameof(files)); + } + + /// + /// Processes the server response + /// + /// + /// + private void AfterUploadFilesDefaultImplementation(IUploadFilesApiResponse apiResponseLocalVar, List files) + { + bool suppressDefaultLog = false; + AfterUploadFiles(ref suppressDefaultLog, apiResponseLocalVar, files); + if (!suppressDefaultLog) + Logger.LogInformation("{0,-9} | {1} | {3}", (apiResponseLocalVar.DownloadedAt - apiResponseLocalVar.RequestedAt).TotalSeconds, apiResponseLocalVar.StatusCode, apiResponseLocalVar.Path); + } + + /// + /// Processes the server response + /// + /// + /// + /// + partial void AfterUploadFiles(ref bool suppressDefaultLog, IUploadFilesApiResponse apiResponseLocalVar, List files); + + /// + /// Logs exceptions that occur while retrieving the server response + /// + /// + /// + /// + /// + private void OnErrorUploadFilesDefaultImplementation(Exception exceptionLocalVar, string pathFormatLocalVar, string pathLocalVar, List files) + { + bool suppressDefaultLogLocalVar = false; + OnErrorUploadFiles(ref suppressDefaultLogLocalVar, exceptionLocalVar, pathFormatLocalVar, pathLocalVar, files); + if (!suppressDefaultLogLocalVar) + Logger.LogError(exceptionLocalVar, "An error occurred while sending the request to the server."); + } + + /// + /// A partial method that gives developers a way to provide customized exception handling + /// + /// + /// + /// + /// + /// + partial void OnErrorUploadFiles(ref bool suppressDefaultLogLocalVar, Exception exceptionLocalVar, string pathFormatLocalVar, string pathLocalVar, List files); + + /// + /// Upload multiple files + /// + /// + /// Cancellation Token to cancel the request. + /// <> + public async Task UploadFilesOrDefaultAsync(List files, System.Threading.CancellationToken cancellationToken = default) + { + try + { + return await UploadFilesAsync(files, cancellationToken).ConfigureAwait(false); + } + catch (Exception) + { + return null; + } + } + + /// + /// Upload multiple files + /// + /// Thrown when fails to make API call + /// + /// Cancellation Token to cancel the request. + /// <> + public async Task UploadFilesAsync(List files, System.Threading.CancellationToken cancellationToken = default) + { + UriBuilder uriBuilderLocalVar = new UriBuilder(); + + try + { + ValidateUploadFiles(files); + + FormatUploadFiles(files); + + using (HttpRequestMessage httpRequestMessageLocalVar = new HttpRequestMessage()) + { + uriBuilderLocalVar.Host = HttpClient.BaseAddress!.Host; + uriBuilderLocalVar.Port = HttpClient.BaseAddress.Port; + uriBuilderLocalVar.Scheme = HttpClient.BaseAddress.Scheme; + uriBuilderLocalVar.Path = HttpClient.BaseAddress.AbsolutePath == "/" + ? "/upload" + : string.Concat(HttpClient.BaseAddress.AbsolutePath, "/upload"); + + MultipartContent multipartContentLocalVar = new MultipartContent(); + + httpRequestMessageLocalVar.Content = multipartContentLocalVar; + + List> formParameterLocalVars = new List>(); + + multipartContentLocalVar.Add(new FormUrlEncodedContent(formParameterLocalVars)); + + foreach (global::System.IO.Stream streamLocalVar in files) + { + 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); + } + + httpRequestMessageLocalVar.RequestUri = uriBuilderLocalVar.Uri; + + string[] contentTypes = new string[] { + "multipart/form-data" + }; + + string? contentTypeLocalVar = ClientUtils.SelectHeaderContentType(contentTypes); + + if (contentTypeLocalVar != null && httpRequestMessageLocalVar.Content != null) + httpRequestMessageLocalVar.Content.Headers.ContentType = new MediaTypeHeaderValue(contentTypeLocalVar); + + string[] acceptLocalVars = new string[] { + "application/json" + }; + + string? acceptLocalVar = ClientUtils.SelectHeaderAccept(acceptLocalVars); + + if (acceptLocalVar != null) + httpRequestMessageLocalVar.Headers.Accept.Add(new MediaTypeWithQualityHeaderValue(acceptLocalVar)); + + httpRequestMessageLocalVar.Method = HttpMethod.Post; + + DateTime requestedAtLocalVar = DateTime.UtcNow; + + using (HttpResponseMessage httpResponseMessageLocalVar = await HttpClient.SendAsync(httpRequestMessageLocalVar, cancellationToken).ConfigureAwait(false)) + { + string responseContentLocalVar = await httpResponseMessageLocalVar.Content.ReadAsStringAsync(cancellationToken).ConfigureAwait(false); + + ILogger apiResponseLoggerLocalVar = LoggerFactory.CreateLogger(); + + UploadFilesApiResponse apiResponseLocalVar = new(apiResponseLoggerLocalVar, httpRequestMessageLocalVar, httpResponseMessageLocalVar, responseContentLocalVar, "/upload", requestedAtLocalVar, _jsonSerializerOptions); + + AfterUploadFilesDefaultImplementation(apiResponseLocalVar, files); + + Events.ExecuteOnUploadFiles(apiResponseLocalVar); + + return apiResponseLocalVar; + } + } + } + catch(Exception e) + { + OnErrorUploadFilesDefaultImplementation(e, "/upload", uriBuilderLocalVar.Path, files); + Events.ExecuteOnErrorUploadFiles(e); + throw; + } + } + + /// + /// The + /// + public partial class UploadFilesApiResponse : Org.OpenAPITools.Client.ApiResponse, IUploadFilesApiResponse + { + /// + /// The logger + /// + public ILogger Logger { get; } + + /// + /// The + /// + /// + /// + /// + /// + /// + /// + /// + public UploadFilesApiResponse(ILogger logger, System.Net.Http.HttpRequestMessage httpRequestMessage, System.Net.Http.HttpResponseMessage httpResponseMessage, string rawContent, string path, DateTime requestedAt, System.Text.Json.JsonSerializerOptions jsonSerializerOptions) : base(httpRequestMessage, httpResponseMessage, rawContent, path, requestedAt, jsonSerializerOptions) + { + Logger = logger; + OnCreated(httpRequestMessage, httpResponseMessage); + } + + partial void OnCreated(global::System.Net.Http.HttpRequestMessage httpRequestMessage, System.Net.Http.HttpResponseMessage httpResponseMessage); + + /// + /// Returns true if the response is 200 Ok + /// + /// + public bool IsOk => 200 == (int)StatusCode; + + /// + /// Deserializes the response if the response is 200 Ok + /// + /// + public Org.OpenAPITools.Model.UploadFiles200Response? Ok() + { + // This logic may be modified with the AsModel.mustache template + return IsOk + ? System.Text.Json.JsonSerializer.Deserialize(RawContent, _jsonSerializerOptions) + : null; + } + + /// + /// Returns true if the response is 200 Ok and the deserialized response is not null + /// + /// + /// + public bool TryOk([NotNullWhen(true)]out Org.OpenAPITools.Model.UploadFiles200Response? result) + { + result = null; + + try + { + result = Ok(); + } catch (Exception e) + { + OnDeserializationErrorDefaultImplementation(e, (HttpStatusCode)200); + } + + return result != null; + } + + private void OnDeserializationErrorDefaultImplementation(Exception exception, HttpStatusCode httpStatusCode) + { + bool suppressDefaultLog = false; + OnDeserializationError(ref suppressDefaultLog, exception, httpStatusCode); + if (!suppressDefaultLog) + Logger.LogError(exception, "An error occurred while deserializing the {code} response.", httpStatusCode); + } + + partial void OnDeserializationError(ref bool suppressDefaultLog, Exception exception, HttpStatusCode httpStatusCode); + } } } diff --git a/samples/client/petstore/csharp/generichost/net8/NullReferenceTypes/src/Org.OpenAPITools/Api/FakeApi.cs b/samples/client/petstore/csharp/generichost/net8/NullReferenceTypes/src/Org.OpenAPITools/Api/FakeApi.cs index a8cd8a748f54..5706daa419cb 100644 --- a/samples/client/petstore/csharp/generichost/net8/NullReferenceTypes/src/Org.OpenAPITools/Api/FakeApi.cs +++ b/samples/client/petstore/csharp/generichost/net8/NullReferenceTypes/src/Org.OpenAPITools/Api/FakeApi.cs @@ -4035,7 +4035,6 @@ public async Task TestEndpointParametersAsyn if (binary.IsSet) multipartContentLocalVar.Add(new StreamContent(binary.Value)); - if (callback.IsSet) formParameterLocalVars.Add(new KeyValuePair("callback", ClientUtils.ParameterToString(callback.Value))); @@ -4357,7 +4356,9 @@ public async Task TestEnumParametersAsync(Option List> formParameterLocalVars = new List>(); - multipartContentLocalVar.Add(new FormUrlEncodedContent(formParameterLocalVars)); if (enumFormString.IsSet) + multipartContentLocalVar.Add(new FormUrlEncodedContent(formParameterLocalVars)); + + if (enumFormString.IsSet) formParameterLocalVars.Add(new KeyValuePair("enum_form_string", ClientUtils.ParameterToString(enumFormString.Value))); if (enumFormStringArray.IsSet) diff --git a/samples/client/petstore/csharp/generichost/net8/NullReferenceTypes/src/Org.OpenAPITools/Api/PetApi.cs b/samples/client/petstore/csharp/generichost/net8/NullReferenceTypes/src/Org.OpenAPITools/Api/PetApi.cs index 37841e79d60b..bfdcce3fe2e7 100644 --- a/samples/client/petstore/csharp/generichost/net8/NullReferenceTypes/src/Org.OpenAPITools/Api/PetApi.cs +++ b/samples/client/petstore/csharp/generichost/net8/NullReferenceTypes/src/Org.OpenAPITools/Api/PetApi.cs @@ -2204,7 +2204,9 @@ public async Task UpdatePetWithFormAsync(long pet List> formParameterLocalVars = new List>(); - multipartContentLocalVar.Add(new FormUrlEncodedContent(formParameterLocalVars)); if (name.IsSet) + multipartContentLocalVar.Add(new FormUrlEncodedContent(formParameterLocalVars)); + + if (name.IsSet) formParameterLocalVars.Add(new KeyValuePair("name", ClientUtils.ParameterToString(name.Value))); if (status.IsSet) @@ -2431,12 +2433,13 @@ public async Task UploadFileAsync(long petId, Option> formParameterLocalVars = new List>(); - multipartContentLocalVar.Add(new FormUrlEncodedContent(formParameterLocalVars)); if (additionalMetadata.IsSet) + multipartContentLocalVar.Add(new FormUrlEncodedContent(formParameterLocalVars)); + + if (additionalMetadata.IsSet) formParameterLocalVars.Add(new KeyValuePair("additionalMetadata", ClientUtils.ParameterToString(additionalMetadata.Value))); if (file.IsSet) multipartContentLocalVar.Add(new StreamContent(file.Value)); - List tokenBaseLocalVars = new List(); httpRequestMessageLocalVar.RequestUri = uriBuilderLocalVar.Uri; @@ -2699,7 +2702,9 @@ public async Task UploadFileWithRequired List> formParameterLocalVars = new List>(); - multipartContentLocalVar.Add(new FormUrlEncodedContent(formParameterLocalVars)); multipartContentLocalVar.Add(new StreamContent(requiredFile)); + multipartContentLocalVar.Add(new FormUrlEncodedContent(formParameterLocalVars)); + + multipartContentLocalVar.Add(new StreamContent(requiredFile)); if (additionalMetadata.IsSet) formParameterLocalVars.Add(new KeyValuePair("additionalMetadata", ClientUtils.ParameterToString(additionalMetadata.Value))); diff --git a/samples/client/petstore/csharp/generichost/net8/NullReferenceTypes/src/Org.OpenAPITools/Client/HostConfiguration.cs b/samples/client/petstore/csharp/generichost/net8/NullReferenceTypes/src/Org.OpenAPITools/Client/HostConfiguration.cs index 7828441b95e5..720fec5ca1a1 100644 --- a/samples/client/petstore/csharp/generichost/net8/NullReferenceTypes/src/Org.OpenAPITools/Client/HostConfiguration.cs +++ b/samples/client/petstore/csharp/generichost/net8/NullReferenceTypes/src/Org.OpenAPITools/Client/HostConfiguration.cs @@ -148,6 +148,7 @@ public HostConfiguration(IServiceCollection services) _jsonOptions.Converters.Add(new TestResultCodeNullableJsonConverter()); _jsonOptions.Converters.Add(new TriangleJsonConverter()); _jsonOptions.Converters.Add(new TriangleInterfaceJsonConverter()); + _jsonOptions.Converters.Add(new UploadFiles200ResponseJsonConverter()); _jsonOptions.Converters.Add(new UserJsonConverter()); _jsonOptions.Converters.Add(new WhaleJsonConverter()); _jsonOptions.Converters.Add(new ZebraJsonConverter()); diff --git a/samples/client/petstore/csharp/generichost/net8/NullReferenceTypes/src/Org.OpenAPITools/Model/UploadFiles200Response.cs b/samples/client/petstore/csharp/generichost/net8/NullReferenceTypes/src/Org.OpenAPITools/Model/UploadFiles200Response.cs new file mode 100644 index 000000000000..5a98cea99201 --- /dev/null +++ b/samples/client/petstore/csharp/generichost/net8/NullReferenceTypes/src/Org.OpenAPITools/Model/UploadFiles200Response.cs @@ -0,0 +1,202 @@ +// +/* + * OpenAPI Petstore + * + * This spec is mainly for testing Petstore server and contains fake endpoints, models. Please do not use this for any other purpose. Special characters: \" \\ + * + * The version of the OpenAPI document: 1.0.0 + * Generated by: https://github.com/openapitools/openapi-generator.git + */ + +#nullable enable + +using System; +using System.Collections; +using System.Collections.Generic; +using System.Collections.ObjectModel; +using System.Linq; +using System.IO; +using System.Text; +using System.Text.RegularExpressions; +using System.Text.Json; +using System.Text.Json.Serialization; +using System.ComponentModel.DataAnnotations; +using OpenAPIClientUtils = Org.OpenAPITools.Client.ClientUtils; +using Org.OpenAPITools.Client; + +namespace Org.OpenAPITools.Model +{ + /// + /// UploadFiles200Response + /// + public partial class UploadFiles200Response : IValidatableObject + { + /// + /// Initializes a new instance of the class. + /// + /// fileCount + /// message + [JsonConstructor] + public UploadFiles200Response(Option fileCount = default, Option message = default) + { + FileCountOption = fileCount; + MessageOption = message; + OnCreated(); + } + + partial void OnCreated(); + + /// + /// Used to track the state of FileCount + /// + [JsonIgnore] + [global::System.ComponentModel.EditorBrowsable(global::System.ComponentModel.EditorBrowsableState.Never)] + public Option FileCountOption { get; private set; } + + /// + /// Gets or Sets FileCount + /// + [JsonPropertyName("fileCount")] + public int? FileCount { get { return this.FileCountOption; } set { this.FileCountOption = new(value); } } + + /// + /// Used to track the state of Message + /// + [JsonIgnore] + [global::System.ComponentModel.EditorBrowsable(global::System.ComponentModel.EditorBrowsableState.Never)] + public Option MessageOption { get; private set; } + + /// + /// Gets or Sets Message + /// + [JsonPropertyName("message")] + public string? Message { get { return this.MessageOption; } set { this.MessageOption = new(value); } } + + /// + /// Gets or Sets additional properties + /// + [JsonExtensionData] + public Dictionary AdditionalProperties { get; } = new Dictionary(); + + /// + /// Returns the string presentation of the object + /// + /// String presentation of the object + public override string ToString() + { + StringBuilder sb = new StringBuilder(); + sb.Append("class UploadFiles200Response {\n"); + sb.Append(" FileCount: ").Append(FileCount).Append("\n"); + sb.Append(" Message: ").Append(Message).Append("\n"); + sb.Append(" AdditionalProperties: ").Append(AdditionalProperties).Append("\n"); + sb.Append("}\n"); + return sb.ToString(); + } + + /// + /// To validate all properties of the instance + /// + /// Validation context + /// Validation Result + IEnumerable IValidatableObject.Validate(ValidationContext validationContext) + { + yield break; + } + } + + /// + /// A Json converter for type + /// + public class UploadFiles200ResponseJsonConverter : JsonConverter + { + /// + /// Deserializes json to + /// + /// + /// + /// + /// + /// + public override UploadFiles200Response Read(ref Utf8JsonReader utf8JsonReader, Type typeToConvert, JsonSerializerOptions jsonSerializerOptions) + { + int currentDepth = utf8JsonReader.CurrentDepth; + + if (utf8JsonReader.TokenType != JsonTokenType.StartObject && utf8JsonReader.TokenType != JsonTokenType.StartArray) + throw new JsonException(); + + JsonTokenType startingTokenType = utf8JsonReader.TokenType; + + Option fileCount = default; + Option message = default; + + while (utf8JsonReader.Read()) + { + if (startingTokenType == JsonTokenType.StartObject && utf8JsonReader.TokenType == JsonTokenType.EndObject && currentDepth == utf8JsonReader.CurrentDepth) + break; + + if (startingTokenType == JsonTokenType.StartArray && utf8JsonReader.TokenType == JsonTokenType.EndArray && currentDepth == utf8JsonReader.CurrentDepth) + break; + + if (utf8JsonReader.TokenType == JsonTokenType.PropertyName && currentDepth == utf8JsonReader.CurrentDepth - 1) + { + string? localVarJsonPropertyName = utf8JsonReader.GetString(); + utf8JsonReader.Read(); + + switch (localVarJsonPropertyName) + { + case "fileCount": + fileCount = new Option(utf8JsonReader.TokenType == JsonTokenType.Null ? (int?)null : utf8JsonReader.GetInt32()); + break; + case "message": + message = new Option(utf8JsonReader.GetString()!); + break; + default: + break; + } + } + } + + if (fileCount.IsSet && fileCount.Value == null) + throw new ArgumentNullException(nameof(fileCount), "Property is not nullable for class UploadFiles200Response."); + + if (message.IsSet && message.Value == null) + throw new ArgumentNullException(nameof(message), "Property is not nullable for class UploadFiles200Response."); + + return new UploadFiles200Response(fileCount, message); + } + + /// + /// Serializes a + /// + /// + /// + /// + /// + public override void Write(Utf8JsonWriter writer, UploadFiles200Response uploadFiles200Response, JsonSerializerOptions jsonSerializerOptions) + { + writer.WriteStartObject(); + + WriteProperties(writer, uploadFiles200Response, jsonSerializerOptions); + writer.WriteEndObject(); + } + + /// + /// Serializes the properties of + /// + /// + /// + /// + /// + public void WriteProperties(Utf8JsonWriter writer, UploadFiles200Response uploadFiles200Response, JsonSerializerOptions jsonSerializerOptions) + { + if (uploadFiles200Response.MessageOption.IsSet && uploadFiles200Response.Message == null) + throw new ArgumentNullException(nameof(uploadFiles200Response.Message), "Property is required for class UploadFiles200Response."); + + if (uploadFiles200Response.FileCountOption.IsSet) + writer.WriteNumber("fileCount", uploadFiles200Response.FileCountOption.Value!.Value); + + if (uploadFiles200Response.MessageOption.IsSet) + writer.WriteString("message", uploadFiles200Response.Message); + } + } +} diff --git a/samples/client/petstore/csharp/generichost/net8/NullReferenceTypes/src/Org.OpenAPITools/README.md b/samples/client/petstore/csharp/generichost/net8/NullReferenceTypes/src/Org.OpenAPITools/README.md index 6b370c7bd33d..62be25ea883f 100644 --- a/samples/client/petstore/csharp/generichost/net8/NullReferenceTypes/src/Org.OpenAPITools/README.md +++ b/samples/client/petstore/csharp/generichost/net8/NullReferenceTypes/src/Org.OpenAPITools/README.md @@ -115,5 +115,5 @@ namespace YourProject This C# SDK is automatically generated by the [OpenAPI Generator](https://openapi-generator.tech) project. - SDK version: 1.0.0 -- Generator version: 7.14.0-SNAPSHOT +- Generator version: 7.14.0 - Build package: org.openapitools.codegen.languages.CSharpClientCodegen diff --git a/samples/client/petstore/csharp/generichost/net8/OneOf/.openapi-generator/VERSION b/samples/client/petstore/csharp/generichost/net8/OneOf/.openapi-generator/VERSION index 4c631cf217a2..e465da43155f 100644 --- a/samples/client/petstore/csharp/generichost/net8/OneOf/.openapi-generator/VERSION +++ b/samples/client/petstore/csharp/generichost/net8/OneOf/.openapi-generator/VERSION @@ -1 +1 @@ -7.14.0-SNAPSHOT +7.14.0 diff --git a/samples/client/petstore/csharp/generichost/net8/OneOf/src/Org.OpenAPITools/README.md b/samples/client/petstore/csharp/generichost/net8/OneOf/src/Org.OpenAPITools/README.md index f63af5fa9808..ae705734bcea 100644 --- a/samples/client/petstore/csharp/generichost/net8/OneOf/src/Org.OpenAPITools/README.md +++ b/samples/client/petstore/csharp/generichost/net8/OneOf/src/Org.OpenAPITools/README.md @@ -107,5 +107,5 @@ namespace YourProject This C# SDK is automatically generated by the [OpenAPI Generator](https://openapi-generator.tech) project. - SDK version: 1.0.0 -- Generator version: 7.14.0-SNAPSHOT +- Generator version: 7.14.0 - Build package: org.openapitools.codegen.languages.CSharpClientCodegen diff --git a/samples/client/petstore/csharp/generichost/net8/Petstore/.openapi-generator/FILES b/samples/client/petstore/csharp/generichost/net8/Petstore/.openapi-generator/FILES index ab28c754b4b1..b1a86728dc6c 100644 --- a/samples/client/petstore/csharp/generichost/net8/Petstore/.openapi-generator/FILES +++ b/samples/client/petstore/csharp/generichost/net8/Petstore/.openapi-generator/FILES @@ -108,6 +108,7 @@ docs/models/TestResult.md docs/models/TestResultCode.md docs/models/Triangle.md docs/models/TriangleInterface.md +docs/models/UploadFiles200Response.md docs/models/User.md docs/models/Whale.md docs/models/Zebra.md @@ -116,6 +117,7 @@ docs/models/ZeroBasedEnumClass.md docs/scripts/git_push.ps1 docs/scripts/git_push.sh src/Org.OpenAPITools.Test/Api/DependencyInjectionTests.cs +src/Org.OpenAPITools.Test/Model/UploadFiles200ResponseTests.cs src/Org.OpenAPITools.Test/Org.OpenAPITools.Test.csproj src/Org.OpenAPITools.Test/README.md src/Org.OpenAPITools/Api/AnotherFakeApi.cs @@ -251,6 +253,7 @@ src/Org.OpenAPITools/Model/TestResult.cs src/Org.OpenAPITools/Model/TestResultCode.cs src/Org.OpenAPITools/Model/Triangle.cs src/Org.OpenAPITools/Model/TriangleInterface.cs +src/Org.OpenAPITools/Model/UploadFiles200Response.cs src/Org.OpenAPITools/Model/User.cs src/Org.OpenAPITools/Model/Whale.cs src/Org.OpenAPITools/Model/Zebra.cs diff --git a/samples/client/petstore/csharp/generichost/net8/Petstore/.openapi-generator/VERSION b/samples/client/petstore/csharp/generichost/net8/Petstore/.openapi-generator/VERSION index 4c631cf217a2..e465da43155f 100644 --- a/samples/client/petstore/csharp/generichost/net8/Petstore/.openapi-generator/VERSION +++ b/samples/client/petstore/csharp/generichost/net8/Petstore/.openapi-generator/VERSION @@ -1 +1 @@ -7.14.0-SNAPSHOT +7.14.0 diff --git a/samples/client/petstore/csharp/generichost/net8/Petstore/api/openapi.yaml b/samples/client/petstore/csharp/generichost/net8/Petstore/api/openapi.yaml index d86a1d2f6d87..276850a46bc1 100644 --- a/samples/client/petstore/csharp/generichost/net8/Petstore/api/openapi.yaml +++ b/samples/client/petstore/csharp/generichost/net8/Petstore/api/openapi.yaml @@ -41,6 +41,23 @@ tags: - description: Operations about user name: user paths: + /upload: + post: + operationId: uploadFiles + requestBody: + content: + multipart/form-data: + schema: + $ref: "#/components/schemas/uploadFiles_request" + required: true + responses: + "200": + content: + application/json: + schema: + $ref: "#/components/schemas/uploadFiles_200_response" + description: Files uploaded successfully + summary: Upload multiple files /roles/report: get: responses: @@ -2865,6 +2882,26 @@ components: - APPROVED - MANUAL_APPROVAL_REQUIRED type: string + uploadFiles_request: + properties: + files: + items: + format: binary + type: string + type: array + required: + - files + type: object + uploadFiles_200_response: + example: + message: message + fileCount: 0 + properties: + message: + type: string + fileCount: + type: integer + type: object _foo_get_default_response: example: string: diff --git a/samples/client/petstore/csharp/generichost/net8/Petstore/docs/apis/DefaultApi.md b/samples/client/petstore/csharp/generichost/net8/Petstore/docs/apis/DefaultApi.md index e97541b8b6a5..0fa36d06dcaf 100644 --- a/samples/client/petstore/csharp/generichost/net8/Petstore/docs/apis/DefaultApi.md +++ b/samples/client/petstore/csharp/generichost/net8/Petstore/docs/apis/DefaultApi.md @@ -9,6 +9,7 @@ All URIs are relative to *http://petstore.swagger.io:80/v2* | [**Hello**](DefaultApi.md#hello) | **GET** /hello | Hello | | [**RolesReportGet**](DefaultApi.md#rolesreportget) | **GET** /roles/report | | | [**Test**](DefaultApi.md#test) | **GET** /test | Retrieve an existing Notificationtest's Elements | +| [**UploadFiles**](DefaultApi.md#uploadfiles) | **POST** /upload | Upload multiple files | # **FooGet** @@ -166,3 +167,37 @@ No authorization required [[Back to top]](#) [[Back to API list]](../../README.md#documentation-for-api-endpoints) [[Back to Model list]](../../README.md#documentation-for-models) [[Back to README]](../../README.md) + +# **UploadFiles** +> UploadFiles200Response UploadFiles (List files) + +Upload multiple files + + +### Parameters + +| Name | Type | Description | Notes | +|------|------|-------------|-------| +| **files** | **List<System.IO.Stream>** | | | + +### Return type + +[**UploadFiles200Response**](UploadFiles200Response.md) + +### Authorization + +No authorization required + +### HTTP request headers + + - **Content-Type**: multipart/form-data + - **Accept**: application/json + + +### HTTP response details +| Status code | Description | Response headers | +|-------------|-------------|------------------| +| **200** | Files uploaded successfully | - | + +[[Back to top]](#) [[Back to API list]](../../README.md#documentation-for-api-endpoints) [[Back to Model list]](../../README.md#documentation-for-models) [[Back to README]](../../README.md) + diff --git a/samples/client/petstore/csharp/generichost/net8/Petstore/docs/models/UploadFiles200Response.md b/samples/client/petstore/csharp/generichost/net8/Petstore/docs/models/UploadFiles200Response.md new file mode 100644 index 000000000000..8e32fc151b34 --- /dev/null +++ b/samples/client/petstore/csharp/generichost/net8/Petstore/docs/models/UploadFiles200Response.md @@ -0,0 +1,11 @@ +# Org.OpenAPITools.Model.UploadFiles200Response + +## Properties + +Name | Type | Description | Notes +------------ | ------------- | ------------- | ------------- +**FileCount** | **int** | | [optional] +**Message** | **string** | | [optional] + +[[Back to Model list]](../../README.md#documentation-for-models) [[Back to API list]](../../README.md#documentation-for-api-endpoints) [[Back to README]](../../README.md) + diff --git a/samples/client/petstore/csharp/generichost/net8/Petstore/src/Org.OpenAPITools.Test/Model/UploadFiles200ResponseTests.cs b/samples/client/petstore/csharp/generichost/net8/Petstore/src/Org.OpenAPITools.Test/Model/UploadFiles200ResponseTests.cs new file mode 100644 index 000000000000..e6003ac29cfe --- /dev/null +++ b/samples/client/petstore/csharp/generichost/net8/Petstore/src/Org.OpenAPITools.Test/Model/UploadFiles200ResponseTests.cs @@ -0,0 +1,74 @@ +/* + * OpenAPI Petstore + * + * This spec is mainly for testing Petstore server and contains fake endpoints, models. Please do not use this for any other purpose. Special characters: \" \\ + * + * The version of the OpenAPI document: 1.0.0 + * Generated by: https://github.com/openapitools/openapi-generator.git + */ + + +using Xunit; + +using System; +using System.Linq; +using System.IO; +using System.Collections.Generic; +using Org.OpenAPITools.Model; +using Org.OpenAPITools.Client; +using System.Reflection; + +namespace Org.OpenAPITools.Test.Model +{ + /// + /// Class for testing UploadFiles200Response + /// + /// + /// This file is automatically generated by OpenAPI Generator (https://openapi-generator.tech). + /// Please update the test case below to test the model. + /// + public class UploadFiles200ResponseTests : IDisposable + { + // TODO uncomment below to declare an instance variable for UploadFiles200Response + //private UploadFiles200Response instance; + + public UploadFiles200ResponseTests() + { + // TODO uncomment below to create an instance of UploadFiles200Response + //instance = new UploadFiles200Response(); + } + + public void Dispose() + { + // Cleanup when everything is done. + } + + /// + /// Test an instance of UploadFiles200Response + /// + [Fact] + public void UploadFiles200ResponseInstanceTest() + { + // TODO uncomment below to test "IsType" UploadFiles200Response + //Assert.IsType(instance); + } + + /// + /// Test the property 'FileCount' + /// + [Fact] + public void FileCountTest() + { + // TODO unit test for the property 'FileCount' + } + + /// + /// Test the property 'Message' + /// + [Fact] + public void MessageTest() + { + // TODO unit test for the property 'Message' + } + } +} diff --git a/samples/client/petstore/csharp/generichost/net8/Petstore/src/Org.OpenAPITools/Api/DefaultApi.cs b/samples/client/petstore/csharp/generichost/net8/Petstore/src/Org.OpenAPITools/Api/DefaultApi.cs index b26e51c70f3b..b3303666acac 100644 --- a/samples/client/petstore/csharp/generichost/net8/Petstore/src/Org.OpenAPITools/Api/DefaultApi.cs +++ b/samples/client/petstore/csharp/generichost/net8/Petstore/src/Org.OpenAPITools/Api/DefaultApi.cs @@ -139,6 +139,29 @@ public interface IDefaultApi : IApi /// Cancellation Token to cancel the request. /// <> Task TestOrDefaultAsync(System.Threading.CancellationToken cancellationToken = default); + + /// + /// Upload multiple files + /// + /// + /// + /// + /// Thrown when fails to make API call + /// + /// Cancellation Token to cancel the request. + /// <> + Task UploadFilesAsync(List files, System.Threading.CancellationToken cancellationToken = default); + + /// + /// Upload multiple files + /// + /// + /// + /// + /// + /// Cancellation Token to cancel the request. + /// <> + Task UploadFilesOrDefaultAsync(List files, System.Threading.CancellationToken cancellationToken = default); } /// @@ -201,6 +224,18 @@ public interface ITestApiResponse : Org.OpenAPITools.Client.IApiResponse, IOk + /// The + /// + public interface IUploadFilesApiResponse : Org.OpenAPITools.Client.IApiResponse, IOk + { + /// + /// Returns true if the response is 200 Ok + /// + /// + bool IsOk { get; } + } + /// /// Represents a collection of functions to interact with the API endpoints /// @@ -305,6 +340,26 @@ internal void ExecuteOnErrorTest(Exception exception) { OnErrorTest?.Invoke(this, new ExceptionEventArgs(exception)); } + + /// + /// The event raised after the server response + /// + public event EventHandler OnUploadFiles; + + /// + /// The event raised after an error querying the server + /// + public event EventHandler OnErrorUploadFiles; + + internal void ExecuteOnUploadFiles(DefaultApi.UploadFilesApiResponse apiResponse) + { + OnUploadFiles?.Invoke(this, new ApiResponseEventArgs(apiResponse)); + } + + internal void ExecuteOnErrorUploadFiles(Exception exception) + { + OnErrorUploadFiles?.Invoke(this, new ExceptionEventArgs(exception)); + } } /// @@ -1362,5 +1417,252 @@ private void OnDeserializationErrorDefaultImplementation(Exception exception, Ht partial void OnDeserializationError(ref bool suppressDefaultLog, Exception exception, HttpStatusCode httpStatusCode); } + + partial void FormatUploadFiles(List files); + + /// + /// Validates the request parameters + /// + /// + /// + private void ValidateUploadFiles(List files) + { + if (files == null) + throw new ArgumentNullException(nameof(files)); + } + + /// + /// Processes the server response + /// + /// + /// + private void AfterUploadFilesDefaultImplementation(IUploadFilesApiResponse apiResponseLocalVar, List files) + { + bool suppressDefaultLog = false; + AfterUploadFiles(ref suppressDefaultLog, apiResponseLocalVar, files); + if (!suppressDefaultLog) + Logger.LogInformation("{0,-9} | {1} | {3}", (apiResponseLocalVar.DownloadedAt - apiResponseLocalVar.RequestedAt).TotalSeconds, apiResponseLocalVar.StatusCode, apiResponseLocalVar.Path); + } + + /// + /// Processes the server response + /// + /// + /// + /// + partial void AfterUploadFiles(ref bool suppressDefaultLog, IUploadFilesApiResponse apiResponseLocalVar, List files); + + /// + /// Logs exceptions that occur while retrieving the server response + /// + /// + /// + /// + /// + private void OnErrorUploadFilesDefaultImplementation(Exception exceptionLocalVar, string pathFormatLocalVar, string pathLocalVar, List files) + { + bool suppressDefaultLogLocalVar = false; + OnErrorUploadFiles(ref suppressDefaultLogLocalVar, exceptionLocalVar, pathFormatLocalVar, pathLocalVar, files); + if (!suppressDefaultLogLocalVar) + Logger.LogError(exceptionLocalVar, "An error occurred while sending the request to the server."); + } + + /// + /// A partial method that gives developers a way to provide customized exception handling + /// + /// + /// + /// + /// + /// + partial void OnErrorUploadFiles(ref bool suppressDefaultLogLocalVar, Exception exceptionLocalVar, string pathFormatLocalVar, string pathLocalVar, List files); + + /// + /// Upload multiple files + /// + /// + /// Cancellation Token to cancel the request. + /// <> + public async Task UploadFilesOrDefaultAsync(List files, System.Threading.CancellationToken cancellationToken = default) + { + try + { + return await UploadFilesAsync(files, cancellationToken).ConfigureAwait(false); + } + catch (Exception) + { + return null; + } + } + + /// + /// Upload multiple files + /// + /// Thrown when fails to make API call + /// + /// Cancellation Token to cancel the request. + /// <> + public async Task UploadFilesAsync(List files, System.Threading.CancellationToken cancellationToken = default) + { + UriBuilder uriBuilderLocalVar = new UriBuilder(); + + try + { + ValidateUploadFiles(files); + + FormatUploadFiles(files); + + using (HttpRequestMessage httpRequestMessageLocalVar = new HttpRequestMessage()) + { + uriBuilderLocalVar.Host = HttpClient.BaseAddress.Host; + uriBuilderLocalVar.Port = HttpClient.BaseAddress.Port; + uriBuilderLocalVar.Scheme = HttpClient.BaseAddress.Scheme; + uriBuilderLocalVar.Path = HttpClient.BaseAddress.AbsolutePath == "/" + ? "/upload" + : string.Concat(HttpClient.BaseAddress.AbsolutePath, "/upload"); + + MultipartContent multipartContentLocalVar = new MultipartContent(); + + httpRequestMessageLocalVar.Content = multipartContentLocalVar; + + List> formParameterLocalVars = new List>(); + + multipartContentLocalVar.Add(new FormUrlEncodedContent(formParameterLocalVars)); + + foreach (global::System.IO.Stream streamLocalVar in files) + { + 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); + } + + httpRequestMessageLocalVar.RequestUri = uriBuilderLocalVar.Uri; + + string[] contentTypes = new string[] { + "multipart/form-data" + }; + + string contentTypeLocalVar = ClientUtils.SelectHeaderContentType(contentTypes); + + if (contentTypeLocalVar != null && httpRequestMessageLocalVar.Content != null) + httpRequestMessageLocalVar.Content.Headers.ContentType = new MediaTypeHeaderValue(contentTypeLocalVar); + + string[] acceptLocalVars = new string[] { + "application/json" + }; + + string acceptLocalVar = ClientUtils.SelectHeaderAccept(acceptLocalVars); + + if (acceptLocalVar != null) + httpRequestMessageLocalVar.Headers.Accept.Add(new MediaTypeWithQualityHeaderValue(acceptLocalVar)); + + httpRequestMessageLocalVar.Method = HttpMethod.Post; + + DateTime requestedAtLocalVar = DateTime.UtcNow; + + using (HttpResponseMessage httpResponseMessageLocalVar = await HttpClient.SendAsync(httpRequestMessageLocalVar, cancellationToken).ConfigureAwait(false)) + { + string responseContentLocalVar = await httpResponseMessageLocalVar.Content.ReadAsStringAsync(cancellationToken).ConfigureAwait(false); + + ILogger apiResponseLoggerLocalVar = LoggerFactory.CreateLogger(); + + UploadFilesApiResponse apiResponseLocalVar = new(apiResponseLoggerLocalVar, httpRequestMessageLocalVar, httpResponseMessageLocalVar, responseContentLocalVar, "/upload", requestedAtLocalVar, _jsonSerializerOptions); + + AfterUploadFilesDefaultImplementation(apiResponseLocalVar, files); + + Events.ExecuteOnUploadFiles(apiResponseLocalVar); + + return apiResponseLocalVar; + } + } + } + catch(Exception e) + { + OnErrorUploadFilesDefaultImplementation(e, "/upload", uriBuilderLocalVar.Path, files); + Events.ExecuteOnErrorUploadFiles(e); + throw; + } + } + + /// + /// The + /// + public partial class UploadFilesApiResponse : Org.OpenAPITools.Client.ApiResponse, IUploadFilesApiResponse + { + /// + /// The logger + /// + public ILogger Logger { get; } + + /// + /// The + /// + /// + /// + /// + /// + /// + /// + /// + public UploadFilesApiResponse(ILogger logger, System.Net.Http.HttpRequestMessage httpRequestMessage, System.Net.Http.HttpResponseMessage httpResponseMessage, string rawContent, string path, DateTime requestedAt, System.Text.Json.JsonSerializerOptions jsonSerializerOptions) : base(httpRequestMessage, httpResponseMessage, rawContent, path, requestedAt, jsonSerializerOptions) + { + Logger = logger; + OnCreated(httpRequestMessage, httpResponseMessage); + } + + partial void OnCreated(global::System.Net.Http.HttpRequestMessage httpRequestMessage, System.Net.Http.HttpResponseMessage httpResponseMessage); + + /// + /// Returns true if the response is 200 Ok + /// + /// + public bool IsOk => 200 == (int)StatusCode; + + /// + /// Deserializes the response if the response is 200 Ok + /// + /// + public Org.OpenAPITools.Model.UploadFiles200Response Ok() + { + // This logic may be modified with the AsModel.mustache template + return IsOk + ? System.Text.Json.JsonSerializer.Deserialize(RawContent, _jsonSerializerOptions) + : null; + } + + /// + /// Returns true if the response is 200 Ok and the deserialized response is not null + /// + /// + /// + public bool TryOk([NotNullWhen(true)]out Org.OpenAPITools.Model.UploadFiles200Response result) + { + result = null; + + try + { + result = Ok(); + } catch (Exception e) + { + OnDeserializationErrorDefaultImplementation(e, (HttpStatusCode)200); + } + + return result != null; + } + + private void OnDeserializationErrorDefaultImplementation(Exception exception, HttpStatusCode httpStatusCode) + { + bool suppressDefaultLog = false; + OnDeserializationError(ref suppressDefaultLog, exception, httpStatusCode); + if (!suppressDefaultLog) + Logger.LogError(exception, "An error occurred while deserializing the {code} response.", httpStatusCode); + } + + partial void OnDeserializationError(ref bool suppressDefaultLog, Exception exception, HttpStatusCode httpStatusCode); + } } } diff --git a/samples/client/petstore/csharp/generichost/net8/Petstore/src/Org.OpenAPITools/Api/FakeApi.cs b/samples/client/petstore/csharp/generichost/net8/Petstore/src/Org.OpenAPITools/Api/FakeApi.cs index 81aa4deb8b58..92a60ebd44b8 100644 --- a/samples/client/petstore/csharp/generichost/net8/Petstore/src/Org.OpenAPITools/Api/FakeApi.cs +++ b/samples/client/petstore/csharp/generichost/net8/Petstore/src/Org.OpenAPITools/Api/FakeApi.cs @@ -4033,7 +4033,6 @@ public async Task TestEndpointParametersAsyn if (binary.IsSet) multipartContentLocalVar.Add(new StreamContent(binary.Value)); - if (callback.IsSet) formParameterLocalVars.Add(new KeyValuePair("callback", ClientUtils.ParameterToString(callback.Value))); @@ -4355,7 +4354,9 @@ public async Task TestEnumParametersAsync(Option List> formParameterLocalVars = new List>(); - multipartContentLocalVar.Add(new FormUrlEncodedContent(formParameterLocalVars)); if (enumFormString.IsSet) + multipartContentLocalVar.Add(new FormUrlEncodedContent(formParameterLocalVars)); + + if (enumFormString.IsSet) formParameterLocalVars.Add(new KeyValuePair("enum_form_string", ClientUtils.ParameterToString(enumFormString.Value))); if (enumFormStringArray.IsSet) diff --git a/samples/client/petstore/csharp/generichost/net8/Petstore/src/Org.OpenAPITools/Api/PetApi.cs b/samples/client/petstore/csharp/generichost/net8/Petstore/src/Org.OpenAPITools/Api/PetApi.cs index 5b368a8be687..1c3a80231315 100644 --- a/samples/client/petstore/csharp/generichost/net8/Petstore/src/Org.OpenAPITools/Api/PetApi.cs +++ b/samples/client/petstore/csharp/generichost/net8/Petstore/src/Org.OpenAPITools/Api/PetApi.cs @@ -2202,7 +2202,9 @@ public async Task UpdatePetWithFormAsync(long pet List> formParameterLocalVars = new List>(); - multipartContentLocalVar.Add(new FormUrlEncodedContent(formParameterLocalVars)); if (name.IsSet) + multipartContentLocalVar.Add(new FormUrlEncodedContent(formParameterLocalVars)); + + if (name.IsSet) formParameterLocalVars.Add(new KeyValuePair("name", ClientUtils.ParameterToString(name.Value))); if (status.IsSet) @@ -2429,12 +2431,13 @@ public async Task UploadFileAsync(long petId, Option> formParameterLocalVars = new List>(); - multipartContentLocalVar.Add(new FormUrlEncodedContent(formParameterLocalVars)); if (additionalMetadata.IsSet) + multipartContentLocalVar.Add(new FormUrlEncodedContent(formParameterLocalVars)); + + if (additionalMetadata.IsSet) formParameterLocalVars.Add(new KeyValuePair("additionalMetadata", ClientUtils.ParameterToString(additionalMetadata.Value))); if (file.IsSet) multipartContentLocalVar.Add(new StreamContent(file.Value)); - List tokenBaseLocalVars = new List(); httpRequestMessageLocalVar.RequestUri = uriBuilderLocalVar.Uri; @@ -2697,7 +2700,9 @@ public async Task UploadFileWithRequired List> formParameterLocalVars = new List>(); - multipartContentLocalVar.Add(new FormUrlEncodedContent(formParameterLocalVars)); multipartContentLocalVar.Add(new StreamContent(requiredFile)); + multipartContentLocalVar.Add(new FormUrlEncodedContent(formParameterLocalVars)); + + multipartContentLocalVar.Add(new StreamContent(requiredFile)); if (additionalMetadata.IsSet) formParameterLocalVars.Add(new KeyValuePair("additionalMetadata", ClientUtils.ParameterToString(additionalMetadata.Value))); diff --git a/samples/client/petstore/csharp/generichost/net8/Petstore/src/Org.OpenAPITools/Client/HostConfiguration.cs b/samples/client/petstore/csharp/generichost/net8/Petstore/src/Org.OpenAPITools/Client/HostConfiguration.cs index f97fb3c5e7a2..3783fe7458ed 100644 --- a/samples/client/petstore/csharp/generichost/net8/Petstore/src/Org.OpenAPITools/Client/HostConfiguration.cs +++ b/samples/client/petstore/csharp/generichost/net8/Petstore/src/Org.OpenAPITools/Client/HostConfiguration.cs @@ -146,6 +146,7 @@ public HostConfiguration(IServiceCollection services) _jsonOptions.Converters.Add(new TestResultCodeNullableJsonConverter()); _jsonOptions.Converters.Add(new TriangleJsonConverter()); _jsonOptions.Converters.Add(new TriangleInterfaceJsonConverter()); + _jsonOptions.Converters.Add(new UploadFiles200ResponseJsonConverter()); _jsonOptions.Converters.Add(new UserJsonConverter()); _jsonOptions.Converters.Add(new WhaleJsonConverter()); _jsonOptions.Converters.Add(new ZebraJsonConverter()); diff --git a/samples/client/petstore/csharp/generichost/net8/Petstore/src/Org.OpenAPITools/Model/UploadFiles200Response.cs b/samples/client/petstore/csharp/generichost/net8/Petstore/src/Org.OpenAPITools/Model/UploadFiles200Response.cs new file mode 100644 index 000000000000..4dc38200f1ef --- /dev/null +++ b/samples/client/petstore/csharp/generichost/net8/Petstore/src/Org.OpenAPITools/Model/UploadFiles200Response.cs @@ -0,0 +1,200 @@ +// +/* + * OpenAPI Petstore + * + * This spec is mainly for testing Petstore server and contains fake endpoints, models. Please do not use this for any other purpose. Special characters: \" \\ + * + * The version of the OpenAPI document: 1.0.0 + * Generated by: https://github.com/openapitools/openapi-generator.git + */ + +using System; +using System.Collections; +using System.Collections.Generic; +using System.Collections.ObjectModel; +using System.Linq; +using System.IO; +using System.Text; +using System.Text.RegularExpressions; +using System.Text.Json; +using System.Text.Json.Serialization; +using System.ComponentModel.DataAnnotations; +using OpenAPIClientUtils = Org.OpenAPITools.Client.ClientUtils; +using Org.OpenAPITools.Client; + +namespace Org.OpenAPITools.Model +{ + /// + /// UploadFiles200Response + /// + public partial class UploadFiles200Response : IValidatableObject + { + /// + /// Initializes a new instance of the class. + /// + /// fileCount + /// message + [JsonConstructor] + public UploadFiles200Response(Option fileCount = default, Option message = default) + { + FileCountOption = fileCount; + MessageOption = message; + OnCreated(); + } + + partial void OnCreated(); + + /// + /// Used to track the state of FileCount + /// + [JsonIgnore] + [global::System.ComponentModel.EditorBrowsable(global::System.ComponentModel.EditorBrowsableState.Never)] + public Option FileCountOption { get; private set; } + + /// + /// Gets or Sets FileCount + /// + [JsonPropertyName("fileCount")] + public int? FileCount { get { return this.FileCountOption; } set { this.FileCountOption = new(value); } } + + /// + /// Used to track the state of Message + /// + [JsonIgnore] + [global::System.ComponentModel.EditorBrowsable(global::System.ComponentModel.EditorBrowsableState.Never)] + public Option MessageOption { get; private set; } + + /// + /// Gets or Sets Message + /// + [JsonPropertyName("message")] + public string Message { get { return this.MessageOption; } set { this.MessageOption = new(value); } } + + /// + /// Gets or Sets additional properties + /// + [JsonExtensionData] + public Dictionary AdditionalProperties { get; } = new Dictionary(); + + /// + /// Returns the string presentation of the object + /// + /// String presentation of the object + public override string ToString() + { + StringBuilder sb = new StringBuilder(); + sb.Append("class UploadFiles200Response {\n"); + sb.Append(" FileCount: ").Append(FileCount).Append("\n"); + sb.Append(" Message: ").Append(Message).Append("\n"); + sb.Append(" AdditionalProperties: ").Append(AdditionalProperties).Append("\n"); + sb.Append("}\n"); + return sb.ToString(); + } + + /// + /// To validate all properties of the instance + /// + /// Validation context + /// Validation Result + IEnumerable IValidatableObject.Validate(ValidationContext validationContext) + { + yield break; + } + } + + /// + /// A Json converter for type + /// + public class UploadFiles200ResponseJsonConverter : JsonConverter + { + /// + /// Deserializes json to + /// + /// + /// + /// + /// + /// + public override UploadFiles200Response Read(ref Utf8JsonReader utf8JsonReader, Type typeToConvert, JsonSerializerOptions jsonSerializerOptions) + { + int currentDepth = utf8JsonReader.CurrentDepth; + + if (utf8JsonReader.TokenType != JsonTokenType.StartObject && utf8JsonReader.TokenType != JsonTokenType.StartArray) + throw new JsonException(); + + JsonTokenType startingTokenType = utf8JsonReader.TokenType; + + Option fileCount = default; + Option message = default; + + while (utf8JsonReader.Read()) + { + if (startingTokenType == JsonTokenType.StartObject && utf8JsonReader.TokenType == JsonTokenType.EndObject && currentDepth == utf8JsonReader.CurrentDepth) + break; + + if (startingTokenType == JsonTokenType.StartArray && utf8JsonReader.TokenType == JsonTokenType.EndArray && currentDepth == utf8JsonReader.CurrentDepth) + break; + + if (utf8JsonReader.TokenType == JsonTokenType.PropertyName && currentDepth == utf8JsonReader.CurrentDepth - 1) + { + string localVarJsonPropertyName = utf8JsonReader.GetString(); + utf8JsonReader.Read(); + + switch (localVarJsonPropertyName) + { + case "fileCount": + fileCount = new Option(utf8JsonReader.TokenType == JsonTokenType.Null ? (int?)null : utf8JsonReader.GetInt32()); + break; + case "message": + message = new Option(utf8JsonReader.GetString()); + break; + default: + break; + } + } + } + + if (fileCount.IsSet && fileCount.Value == null) + throw new ArgumentNullException(nameof(fileCount), "Property is not nullable for class UploadFiles200Response."); + + if (message.IsSet && message.Value == null) + throw new ArgumentNullException(nameof(message), "Property is not nullable for class UploadFiles200Response."); + + return new UploadFiles200Response(fileCount, message); + } + + /// + /// Serializes a + /// + /// + /// + /// + /// + public override void Write(Utf8JsonWriter writer, UploadFiles200Response uploadFiles200Response, JsonSerializerOptions jsonSerializerOptions) + { + writer.WriteStartObject(); + + WriteProperties(writer, uploadFiles200Response, jsonSerializerOptions); + writer.WriteEndObject(); + } + + /// + /// Serializes the properties of + /// + /// + /// + /// + /// + public void WriteProperties(Utf8JsonWriter writer, UploadFiles200Response uploadFiles200Response, JsonSerializerOptions jsonSerializerOptions) + { + if (uploadFiles200Response.MessageOption.IsSet && uploadFiles200Response.Message == null) + throw new ArgumentNullException(nameof(uploadFiles200Response.Message), "Property is required for class UploadFiles200Response."); + + if (uploadFiles200Response.FileCountOption.IsSet) + writer.WriteNumber("fileCount", uploadFiles200Response.FileCountOption.Value.Value); + + if (uploadFiles200Response.MessageOption.IsSet) + writer.WriteString("message", uploadFiles200Response.Message); + } + } +} diff --git a/samples/client/petstore/csharp/generichost/net8/Petstore/src/Org.OpenAPITools/README.md b/samples/client/petstore/csharp/generichost/net8/Petstore/src/Org.OpenAPITools/README.md index 80f8c6bea340..c4d7b255ae76 100644 --- a/samples/client/petstore/csharp/generichost/net8/Petstore/src/Org.OpenAPITools/README.md +++ b/samples/client/petstore/csharp/generichost/net8/Petstore/src/Org.OpenAPITools/README.md @@ -115,5 +115,5 @@ namespace YourProject This C# SDK is automatically generated by the [OpenAPI Generator](https://openapi-generator.tech) project. - SDK version: 1.0.0 -- Generator version: 7.14.0-SNAPSHOT +- Generator version: 7.14.0 - Build package: org.openapitools.codegen.languages.CSharpClientCodegen diff --git a/samples/client/petstore/csharp/generichost/net8/SourceGeneration/.openapi-generator/FILES b/samples/client/petstore/csharp/generichost/net8/SourceGeneration/.openapi-generator/FILES index ab28c754b4b1..b1a86728dc6c 100644 --- a/samples/client/petstore/csharp/generichost/net8/SourceGeneration/.openapi-generator/FILES +++ b/samples/client/petstore/csharp/generichost/net8/SourceGeneration/.openapi-generator/FILES @@ -108,6 +108,7 @@ docs/models/TestResult.md docs/models/TestResultCode.md docs/models/Triangle.md docs/models/TriangleInterface.md +docs/models/UploadFiles200Response.md docs/models/User.md docs/models/Whale.md docs/models/Zebra.md @@ -116,6 +117,7 @@ docs/models/ZeroBasedEnumClass.md docs/scripts/git_push.ps1 docs/scripts/git_push.sh src/Org.OpenAPITools.Test/Api/DependencyInjectionTests.cs +src/Org.OpenAPITools.Test/Model/UploadFiles200ResponseTests.cs src/Org.OpenAPITools.Test/Org.OpenAPITools.Test.csproj src/Org.OpenAPITools.Test/README.md src/Org.OpenAPITools/Api/AnotherFakeApi.cs @@ -251,6 +253,7 @@ src/Org.OpenAPITools/Model/TestResult.cs src/Org.OpenAPITools/Model/TestResultCode.cs src/Org.OpenAPITools/Model/Triangle.cs src/Org.OpenAPITools/Model/TriangleInterface.cs +src/Org.OpenAPITools/Model/UploadFiles200Response.cs src/Org.OpenAPITools/Model/User.cs src/Org.OpenAPITools/Model/Whale.cs src/Org.OpenAPITools/Model/Zebra.cs diff --git a/samples/client/petstore/csharp/generichost/net8/SourceGeneration/.openapi-generator/VERSION b/samples/client/petstore/csharp/generichost/net8/SourceGeneration/.openapi-generator/VERSION index 4c631cf217a2..e465da43155f 100644 --- a/samples/client/petstore/csharp/generichost/net8/SourceGeneration/.openapi-generator/VERSION +++ b/samples/client/petstore/csharp/generichost/net8/SourceGeneration/.openapi-generator/VERSION @@ -1 +1 @@ -7.14.0-SNAPSHOT +7.14.0 diff --git a/samples/client/petstore/csharp/generichost/net8/SourceGeneration/api/openapi.yaml b/samples/client/petstore/csharp/generichost/net8/SourceGeneration/api/openapi.yaml index d86a1d2f6d87..276850a46bc1 100644 --- a/samples/client/petstore/csharp/generichost/net8/SourceGeneration/api/openapi.yaml +++ b/samples/client/petstore/csharp/generichost/net8/SourceGeneration/api/openapi.yaml @@ -41,6 +41,23 @@ tags: - description: Operations about user name: user paths: + /upload: + post: + operationId: uploadFiles + requestBody: + content: + multipart/form-data: + schema: + $ref: "#/components/schemas/uploadFiles_request" + required: true + responses: + "200": + content: + application/json: + schema: + $ref: "#/components/schemas/uploadFiles_200_response" + description: Files uploaded successfully + summary: Upload multiple files /roles/report: get: responses: @@ -2865,6 +2882,26 @@ components: - APPROVED - MANUAL_APPROVAL_REQUIRED type: string + uploadFiles_request: + properties: + files: + items: + format: binary + type: string + type: array + required: + - files + type: object + uploadFiles_200_response: + example: + message: message + fileCount: 0 + properties: + message: + type: string + fileCount: + type: integer + type: object _foo_get_default_response: example: string: diff --git a/samples/client/petstore/csharp/generichost/net8/SourceGeneration/docs/apis/DefaultApi.md b/samples/client/petstore/csharp/generichost/net8/SourceGeneration/docs/apis/DefaultApi.md index e97541b8b6a5..0fa36d06dcaf 100644 --- a/samples/client/petstore/csharp/generichost/net8/SourceGeneration/docs/apis/DefaultApi.md +++ b/samples/client/petstore/csharp/generichost/net8/SourceGeneration/docs/apis/DefaultApi.md @@ -9,6 +9,7 @@ All URIs are relative to *http://petstore.swagger.io:80/v2* | [**Hello**](DefaultApi.md#hello) | **GET** /hello | Hello | | [**RolesReportGet**](DefaultApi.md#rolesreportget) | **GET** /roles/report | | | [**Test**](DefaultApi.md#test) | **GET** /test | Retrieve an existing Notificationtest's Elements | +| [**UploadFiles**](DefaultApi.md#uploadfiles) | **POST** /upload | Upload multiple files | # **FooGet** @@ -166,3 +167,37 @@ No authorization required [[Back to top]](#) [[Back to API list]](../../README.md#documentation-for-api-endpoints) [[Back to Model list]](../../README.md#documentation-for-models) [[Back to README]](../../README.md) + +# **UploadFiles** +> UploadFiles200Response UploadFiles (List files) + +Upload multiple files + + +### Parameters + +| Name | Type | Description | Notes | +|------|------|-------------|-------| +| **files** | **List<System.IO.Stream>** | | | + +### Return type + +[**UploadFiles200Response**](UploadFiles200Response.md) + +### Authorization + +No authorization required + +### HTTP request headers + + - **Content-Type**: multipart/form-data + - **Accept**: application/json + + +### HTTP response details +| Status code | Description | Response headers | +|-------------|-------------|------------------| +| **200** | Files uploaded successfully | - | + +[[Back to top]](#) [[Back to API list]](../../README.md#documentation-for-api-endpoints) [[Back to Model list]](../../README.md#documentation-for-models) [[Back to README]](../../README.md) + diff --git a/samples/client/petstore/csharp/generichost/net8/SourceGeneration/docs/models/UploadFiles200Response.md b/samples/client/petstore/csharp/generichost/net8/SourceGeneration/docs/models/UploadFiles200Response.md new file mode 100644 index 000000000000..8e32fc151b34 --- /dev/null +++ b/samples/client/petstore/csharp/generichost/net8/SourceGeneration/docs/models/UploadFiles200Response.md @@ -0,0 +1,11 @@ +# Org.OpenAPITools.Model.UploadFiles200Response + +## Properties + +Name | Type | Description | Notes +------------ | ------------- | ------------- | ------------- +**FileCount** | **int** | | [optional] +**Message** | **string** | | [optional] + +[[Back to Model list]](../../README.md#documentation-for-models) [[Back to API list]](../../README.md#documentation-for-api-endpoints) [[Back to README]](../../README.md) + diff --git a/samples/client/petstore/csharp/generichost/net8/SourceGeneration/src/Org.OpenAPITools.Test/Model/UploadFiles200ResponseTests.cs b/samples/client/petstore/csharp/generichost/net8/SourceGeneration/src/Org.OpenAPITools.Test/Model/UploadFiles200ResponseTests.cs new file mode 100644 index 000000000000..e6003ac29cfe --- /dev/null +++ b/samples/client/petstore/csharp/generichost/net8/SourceGeneration/src/Org.OpenAPITools.Test/Model/UploadFiles200ResponseTests.cs @@ -0,0 +1,74 @@ +/* + * OpenAPI Petstore + * + * This spec is mainly for testing Petstore server and contains fake endpoints, models. Please do not use this for any other purpose. Special characters: \" \\ + * + * The version of the OpenAPI document: 1.0.0 + * Generated by: https://github.com/openapitools/openapi-generator.git + */ + + +using Xunit; + +using System; +using System.Linq; +using System.IO; +using System.Collections.Generic; +using Org.OpenAPITools.Model; +using Org.OpenAPITools.Client; +using System.Reflection; + +namespace Org.OpenAPITools.Test.Model +{ + /// + /// Class for testing UploadFiles200Response + /// + /// + /// This file is automatically generated by OpenAPI Generator (https://openapi-generator.tech). + /// Please update the test case below to test the model. + /// + public class UploadFiles200ResponseTests : IDisposable + { + // TODO uncomment below to declare an instance variable for UploadFiles200Response + //private UploadFiles200Response instance; + + public UploadFiles200ResponseTests() + { + // TODO uncomment below to create an instance of UploadFiles200Response + //instance = new UploadFiles200Response(); + } + + public void Dispose() + { + // Cleanup when everything is done. + } + + /// + /// Test an instance of UploadFiles200Response + /// + [Fact] + public void UploadFiles200ResponseInstanceTest() + { + // TODO uncomment below to test "IsType" UploadFiles200Response + //Assert.IsType(instance); + } + + /// + /// Test the property 'FileCount' + /// + [Fact] + public void FileCountTest() + { + // TODO unit test for the property 'FileCount' + } + + /// + /// Test the property 'Message' + /// + [Fact] + public void MessageTest() + { + // TODO unit test for the property 'Message' + } + } +} diff --git a/samples/client/petstore/csharp/generichost/net8/SourceGeneration/src/Org.OpenAPITools/Api/DefaultApi.cs b/samples/client/petstore/csharp/generichost/net8/SourceGeneration/src/Org.OpenAPITools/Api/DefaultApi.cs index 545c65127912..56f47ba8f94c 100644 --- a/samples/client/petstore/csharp/generichost/net8/SourceGeneration/src/Org.OpenAPITools/Api/DefaultApi.cs +++ b/samples/client/petstore/csharp/generichost/net8/SourceGeneration/src/Org.OpenAPITools/Api/DefaultApi.cs @@ -141,6 +141,29 @@ public interface IDefaultApi : IApi /// Cancellation Token to cancel the request. /// <?> Task TestOrDefaultAsync(System.Threading.CancellationToken cancellationToken = default); + + /// + /// Upload multiple files + /// + /// + /// + /// + /// Thrown when fails to make API call + /// + /// Cancellation Token to cancel the request. + /// <> + Task UploadFilesAsync(List files, System.Threading.CancellationToken cancellationToken = default); + + /// + /// Upload multiple files + /// + /// + /// + /// + /// + /// Cancellation Token to cancel the request. + /// <?> + Task UploadFilesOrDefaultAsync(List files, System.Threading.CancellationToken cancellationToken = default); } /// @@ -203,6 +226,18 @@ public interface ITestApiResponse : Org.OpenAPITools.Client.IApiResponse, IOk + /// The + /// + public interface IUploadFilesApiResponse : Org.OpenAPITools.Client.IApiResponse, IOk + { + /// + /// Returns true if the response is 200 Ok + /// + /// + bool IsOk { get; } + } + /// /// Represents a collection of functions to interact with the API endpoints /// @@ -307,6 +342,26 @@ internal void ExecuteOnErrorTest(Exception exception) { OnErrorTest?.Invoke(this, new ExceptionEventArgs(exception)); } + + /// + /// The event raised after the server response + /// + public event EventHandler? OnUploadFiles; + + /// + /// The event raised after an error querying the server + /// + public event EventHandler? OnErrorUploadFiles; + + internal void ExecuteOnUploadFiles(DefaultApi.UploadFilesApiResponse apiResponse) + { + OnUploadFiles?.Invoke(this, new ApiResponseEventArgs(apiResponse)); + } + + internal void ExecuteOnErrorUploadFiles(Exception exception) + { + OnErrorUploadFiles?.Invoke(this, new ExceptionEventArgs(exception)); + } } /// @@ -1364,5 +1419,252 @@ private void OnDeserializationErrorDefaultImplementation(Exception exception, Ht partial void OnDeserializationError(ref bool suppressDefaultLog, Exception exception, HttpStatusCode httpStatusCode); } + + partial void FormatUploadFiles(List files); + + /// + /// Validates the request parameters + /// + /// + /// + private void ValidateUploadFiles(List files) + { + if (files == null) + throw new ArgumentNullException(nameof(files)); + } + + /// + /// Processes the server response + /// + /// + /// + private void AfterUploadFilesDefaultImplementation(IUploadFilesApiResponse apiResponseLocalVar, List files) + { + bool suppressDefaultLog = false; + AfterUploadFiles(ref suppressDefaultLog, apiResponseLocalVar, files); + if (!suppressDefaultLog) + Logger.LogInformation("{0,-9} | {1} | {3}", (apiResponseLocalVar.DownloadedAt - apiResponseLocalVar.RequestedAt).TotalSeconds, apiResponseLocalVar.StatusCode, apiResponseLocalVar.Path); + } + + /// + /// Processes the server response + /// + /// + /// + /// + partial void AfterUploadFiles(ref bool suppressDefaultLog, IUploadFilesApiResponse apiResponseLocalVar, List files); + + /// + /// Logs exceptions that occur while retrieving the server response + /// + /// + /// + /// + /// + private void OnErrorUploadFilesDefaultImplementation(Exception exceptionLocalVar, string pathFormatLocalVar, string pathLocalVar, List files) + { + bool suppressDefaultLogLocalVar = false; + OnErrorUploadFiles(ref suppressDefaultLogLocalVar, exceptionLocalVar, pathFormatLocalVar, pathLocalVar, files); + if (!suppressDefaultLogLocalVar) + Logger.LogError(exceptionLocalVar, "An error occurred while sending the request to the server."); + } + + /// + /// A partial method that gives developers a way to provide customized exception handling + /// + /// + /// + /// + /// + /// + partial void OnErrorUploadFiles(ref bool suppressDefaultLogLocalVar, Exception exceptionLocalVar, string pathFormatLocalVar, string pathLocalVar, List files); + + /// + /// Upload multiple files + /// + /// + /// Cancellation Token to cancel the request. + /// <> + public async Task UploadFilesOrDefaultAsync(List files, System.Threading.CancellationToken cancellationToken = default) + { + try + { + return await UploadFilesAsync(files, cancellationToken).ConfigureAwait(false); + } + catch (Exception) + { + return null; + } + } + + /// + /// Upload multiple files + /// + /// Thrown when fails to make API call + /// + /// Cancellation Token to cancel the request. + /// <> + public async Task UploadFilesAsync(List files, System.Threading.CancellationToken cancellationToken = default) + { + UriBuilder uriBuilderLocalVar = new UriBuilder(); + + try + { + ValidateUploadFiles(files); + + FormatUploadFiles(files); + + using (HttpRequestMessage httpRequestMessageLocalVar = new HttpRequestMessage()) + { + uriBuilderLocalVar.Host = HttpClient.BaseAddress!.Host; + uriBuilderLocalVar.Port = HttpClient.BaseAddress.Port; + uriBuilderLocalVar.Scheme = HttpClient.BaseAddress.Scheme; + uriBuilderLocalVar.Path = HttpClient.BaseAddress.AbsolutePath == "/" + ? "/upload" + : string.Concat(HttpClient.BaseAddress.AbsolutePath, "/upload"); + + MultipartContent multipartContentLocalVar = new MultipartContent(); + + httpRequestMessageLocalVar.Content = multipartContentLocalVar; + + List> formParameterLocalVars = new List>(); + + multipartContentLocalVar.Add(new FormUrlEncodedContent(formParameterLocalVars)); + + foreach (global::System.IO.Stream streamLocalVar in files) + { + 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); + } + + httpRequestMessageLocalVar.RequestUri = uriBuilderLocalVar.Uri; + + string[] contentTypes = new string[] { + "multipart/form-data" + }; + + string? contentTypeLocalVar = ClientUtils.SelectHeaderContentType(contentTypes); + + if (contentTypeLocalVar != null && httpRequestMessageLocalVar.Content != null) + httpRequestMessageLocalVar.Content.Headers.ContentType = new MediaTypeHeaderValue(contentTypeLocalVar); + + string[] acceptLocalVars = new string[] { + "application/json" + }; + + string? acceptLocalVar = ClientUtils.SelectHeaderAccept(acceptLocalVars); + + if (acceptLocalVar != null) + httpRequestMessageLocalVar.Headers.Accept.Add(new MediaTypeWithQualityHeaderValue(acceptLocalVar)); + + httpRequestMessageLocalVar.Method = HttpMethod.Post; + + DateTime requestedAtLocalVar = DateTime.UtcNow; + + using (HttpResponseMessage httpResponseMessageLocalVar = await HttpClient.SendAsync(httpRequestMessageLocalVar, cancellationToken).ConfigureAwait(false)) + { + string responseContentLocalVar = await httpResponseMessageLocalVar.Content.ReadAsStringAsync(cancellationToken).ConfigureAwait(false); + + ILogger apiResponseLoggerLocalVar = LoggerFactory.CreateLogger(); + + UploadFilesApiResponse apiResponseLocalVar = new(apiResponseLoggerLocalVar, httpRequestMessageLocalVar, httpResponseMessageLocalVar, responseContentLocalVar, "/upload", requestedAtLocalVar, _jsonSerializerOptions); + + AfterUploadFilesDefaultImplementation(apiResponseLocalVar, files); + + Events.ExecuteOnUploadFiles(apiResponseLocalVar); + + return apiResponseLocalVar; + } + } + } + catch(Exception e) + { + OnErrorUploadFilesDefaultImplementation(e, "/upload", uriBuilderLocalVar.Path, files); + Events.ExecuteOnErrorUploadFiles(e); + throw; + } + } + + /// + /// The + /// + public partial class UploadFilesApiResponse : Org.OpenAPITools.Client.ApiResponse, IUploadFilesApiResponse + { + /// + /// The logger + /// + public ILogger Logger { get; } + + /// + /// The + /// + /// + /// + /// + /// + /// + /// + /// + public UploadFilesApiResponse(ILogger logger, System.Net.Http.HttpRequestMessage httpRequestMessage, System.Net.Http.HttpResponseMessage httpResponseMessage, string rawContent, string path, DateTime requestedAt, System.Text.Json.JsonSerializerOptions jsonSerializerOptions) : base(httpRequestMessage, httpResponseMessage, rawContent, path, requestedAt, jsonSerializerOptions) + { + Logger = logger; + OnCreated(httpRequestMessage, httpResponseMessage); + } + + partial void OnCreated(global::System.Net.Http.HttpRequestMessage httpRequestMessage, System.Net.Http.HttpResponseMessage httpResponseMessage); + + /// + /// Returns true if the response is 200 Ok + /// + /// + public bool IsOk => 200 == (int)StatusCode; + + /// + /// Deserializes the response if the response is 200 Ok + /// + /// + public Org.OpenAPITools.Model.UploadFiles200Response? Ok() + { + // This logic may be modified with the AsModel.mustache template + return IsOk + ? System.Text.Json.JsonSerializer.Deserialize(RawContent, _jsonSerializerOptions) + : null; + } + + /// + /// Returns true if the response is 200 Ok and the deserialized response is not null + /// + /// + /// + public bool TryOk([NotNullWhen(true)]out Org.OpenAPITools.Model.UploadFiles200Response? result) + { + result = null; + + try + { + result = Ok(); + } catch (Exception e) + { + OnDeserializationErrorDefaultImplementation(e, (HttpStatusCode)200); + } + + return result != null; + } + + private void OnDeserializationErrorDefaultImplementation(Exception exception, HttpStatusCode httpStatusCode) + { + bool suppressDefaultLog = false; + OnDeserializationError(ref suppressDefaultLog, exception, httpStatusCode); + if (!suppressDefaultLog) + Logger.LogError(exception, "An error occurred while deserializing the {code} response.", httpStatusCode); + } + + partial void OnDeserializationError(ref bool suppressDefaultLog, Exception exception, HttpStatusCode httpStatusCode); + } } } diff --git a/samples/client/petstore/csharp/generichost/net8/SourceGeneration/src/Org.OpenAPITools/Api/FakeApi.cs b/samples/client/petstore/csharp/generichost/net8/SourceGeneration/src/Org.OpenAPITools/Api/FakeApi.cs index a8cd8a748f54..5706daa419cb 100644 --- a/samples/client/petstore/csharp/generichost/net8/SourceGeneration/src/Org.OpenAPITools/Api/FakeApi.cs +++ b/samples/client/petstore/csharp/generichost/net8/SourceGeneration/src/Org.OpenAPITools/Api/FakeApi.cs @@ -4035,7 +4035,6 @@ public async Task TestEndpointParametersAsyn if (binary.IsSet) multipartContentLocalVar.Add(new StreamContent(binary.Value)); - if (callback.IsSet) formParameterLocalVars.Add(new KeyValuePair("callback", ClientUtils.ParameterToString(callback.Value))); @@ -4357,7 +4356,9 @@ public async Task TestEnumParametersAsync(Option List> formParameterLocalVars = new List>(); - multipartContentLocalVar.Add(new FormUrlEncodedContent(formParameterLocalVars)); if (enumFormString.IsSet) + multipartContentLocalVar.Add(new FormUrlEncodedContent(formParameterLocalVars)); + + if (enumFormString.IsSet) formParameterLocalVars.Add(new KeyValuePair("enum_form_string", ClientUtils.ParameterToString(enumFormString.Value))); if (enumFormStringArray.IsSet) diff --git a/samples/client/petstore/csharp/generichost/net8/SourceGeneration/src/Org.OpenAPITools/Api/PetApi.cs b/samples/client/petstore/csharp/generichost/net8/SourceGeneration/src/Org.OpenAPITools/Api/PetApi.cs index 37841e79d60b..bfdcce3fe2e7 100644 --- a/samples/client/petstore/csharp/generichost/net8/SourceGeneration/src/Org.OpenAPITools/Api/PetApi.cs +++ b/samples/client/petstore/csharp/generichost/net8/SourceGeneration/src/Org.OpenAPITools/Api/PetApi.cs @@ -2204,7 +2204,9 @@ public async Task UpdatePetWithFormAsync(long pet List> formParameterLocalVars = new List>(); - multipartContentLocalVar.Add(new FormUrlEncodedContent(formParameterLocalVars)); if (name.IsSet) + multipartContentLocalVar.Add(new FormUrlEncodedContent(formParameterLocalVars)); + + if (name.IsSet) formParameterLocalVars.Add(new KeyValuePair("name", ClientUtils.ParameterToString(name.Value))); if (status.IsSet) @@ -2431,12 +2433,13 @@ public async Task UploadFileAsync(long petId, Option> formParameterLocalVars = new List>(); - multipartContentLocalVar.Add(new FormUrlEncodedContent(formParameterLocalVars)); if (additionalMetadata.IsSet) + multipartContentLocalVar.Add(new FormUrlEncodedContent(formParameterLocalVars)); + + if (additionalMetadata.IsSet) formParameterLocalVars.Add(new KeyValuePair("additionalMetadata", ClientUtils.ParameterToString(additionalMetadata.Value))); if (file.IsSet) multipartContentLocalVar.Add(new StreamContent(file.Value)); - List tokenBaseLocalVars = new List(); httpRequestMessageLocalVar.RequestUri = uriBuilderLocalVar.Uri; @@ -2699,7 +2702,9 @@ public async Task UploadFileWithRequired List> formParameterLocalVars = new List>(); - multipartContentLocalVar.Add(new FormUrlEncodedContent(formParameterLocalVars)); multipartContentLocalVar.Add(new StreamContent(requiredFile)); + multipartContentLocalVar.Add(new FormUrlEncodedContent(formParameterLocalVars)); + + multipartContentLocalVar.Add(new StreamContent(requiredFile)); if (additionalMetadata.IsSet) formParameterLocalVars.Add(new KeyValuePair("additionalMetadata", ClientUtils.ParameterToString(additionalMetadata.Value))); diff --git a/samples/client/petstore/csharp/generichost/net8/SourceGeneration/src/Org.OpenAPITools/Client/HostConfiguration.cs b/samples/client/petstore/csharp/generichost/net8/SourceGeneration/src/Org.OpenAPITools/Client/HostConfiguration.cs index 759667956526..5f71cc26d315 100644 --- a/samples/client/petstore/csharp/generichost/net8/SourceGeneration/src/Org.OpenAPITools/Client/HostConfiguration.cs +++ b/samples/client/petstore/csharp/generichost/net8/SourceGeneration/src/Org.OpenAPITools/Client/HostConfiguration.cs @@ -148,6 +148,7 @@ public HostConfiguration(IServiceCollection services) _jsonOptions.Converters.Add(new TestResultCodeNullableJsonConverter()); _jsonOptions.Converters.Add(new TriangleJsonConverter()); _jsonOptions.Converters.Add(new TriangleInterfaceJsonConverter()); + _jsonOptions.Converters.Add(new UploadFiles200ResponseJsonConverter()); _jsonOptions.Converters.Add(new UserJsonConverter()); _jsonOptions.Converters.Add(new WhaleJsonConverter()); _jsonOptions.Converters.Add(new ZebraJsonConverter()); @@ -256,6 +257,7 @@ public HostConfiguration(IServiceCollection services) new TestResultCodeSerializationContext(), new TriangleSerializationContext(), new TriangleInterfaceSerializationContext(), + new UploadFiles200ResponseSerializationContext(), new UserSerializationContext(), new WhaleSerializationContext(), new ZebraSerializationContext(), diff --git a/samples/client/petstore/csharp/generichost/net8/SourceGeneration/src/Org.OpenAPITools/Model/UploadFiles200Response.cs b/samples/client/petstore/csharp/generichost/net8/SourceGeneration/src/Org.OpenAPITools/Model/UploadFiles200Response.cs new file mode 100644 index 000000000000..05774844e280 --- /dev/null +++ b/samples/client/petstore/csharp/generichost/net8/SourceGeneration/src/Org.OpenAPITools/Model/UploadFiles200Response.cs @@ -0,0 +1,210 @@ +// +/* + * OpenAPI Petstore + * + * This spec is mainly for testing Petstore server and contains fake endpoints, models. Please do not use this for any other purpose. Special characters: \" \\ + * + * The version of the OpenAPI document: 1.0.0 + * Generated by: https://github.com/openapitools/openapi-generator.git + */ + +#nullable enable + +using System; +using System.Collections; +using System.Collections.Generic; +using System.Collections.ObjectModel; +using System.Linq; +using System.IO; +using System.Text; +using System.Text.RegularExpressions; +using System.Text.Json; +using System.Text.Json.Serialization; +using System.ComponentModel.DataAnnotations; +using OpenAPIClientUtils = Org.OpenAPITools.Client.ClientUtils; +using System.Text.Json.Serialization.Metadata; +using Org.OpenAPITools.Client; + +namespace Org.OpenAPITools.Model +{ + /// + /// UploadFiles200Response + /// + public partial class UploadFiles200Response : IValidatableObject + { + /// + /// Initializes a new instance of the class. + /// + /// fileCount + /// message + [JsonConstructor] + public UploadFiles200Response(Option fileCount = default, Option message = default) + { + FileCountOption = fileCount; + MessageOption = message; + OnCreated(); + } + + partial void OnCreated(); + + /// + /// Used to track the state of FileCount + /// + [JsonIgnore] + [global::System.ComponentModel.EditorBrowsable(global::System.ComponentModel.EditorBrowsableState.Never)] + public Option FileCountOption { get; private set; } + + /// + /// Gets or Sets FileCount + /// + [JsonPropertyName("fileCount")] + public int? FileCount { get { return this.FileCountOption; } set { this.FileCountOption = new(value); } } + + /// + /// Used to track the state of Message + /// + [JsonIgnore] + [global::System.ComponentModel.EditorBrowsable(global::System.ComponentModel.EditorBrowsableState.Never)] + public Option MessageOption { get; private set; } + + /// + /// Gets or Sets Message + /// + [JsonPropertyName("message")] + public string? Message { get { return this.MessageOption; } set { this.MessageOption = new(value); } } + + /// + /// Gets or Sets additional properties + /// + [JsonExtensionData] + public Dictionary AdditionalProperties { get; } = new Dictionary(); + + /// + /// Returns the string presentation of the object + /// + /// String presentation of the object + public override string ToString() + { + StringBuilder sb = new StringBuilder(); + sb.Append("class UploadFiles200Response {\n"); + sb.Append(" FileCount: ").Append(FileCount).Append("\n"); + sb.Append(" Message: ").Append(Message).Append("\n"); + sb.Append(" AdditionalProperties: ").Append(AdditionalProperties).Append("\n"); + sb.Append("}\n"); + return sb.ToString(); + } + + /// + /// To validate all properties of the instance + /// + /// Validation context + /// Validation Result + IEnumerable IValidatableObject.Validate(ValidationContext validationContext) + { + yield break; + } + } + + /// + /// A Json converter for type + /// + public class UploadFiles200ResponseJsonConverter : JsonConverter + { + /// + /// Deserializes json to + /// + /// + /// + /// + /// + /// + public override UploadFiles200Response Read(ref Utf8JsonReader utf8JsonReader, Type typeToConvert, JsonSerializerOptions jsonSerializerOptions) + { + int currentDepth = utf8JsonReader.CurrentDepth; + + if (utf8JsonReader.TokenType != JsonTokenType.StartObject && utf8JsonReader.TokenType != JsonTokenType.StartArray) + throw new JsonException(); + + JsonTokenType startingTokenType = utf8JsonReader.TokenType; + + Option fileCount = default; + Option message = default; + + while (utf8JsonReader.Read()) + { + if (startingTokenType == JsonTokenType.StartObject && utf8JsonReader.TokenType == JsonTokenType.EndObject && currentDepth == utf8JsonReader.CurrentDepth) + break; + + if (startingTokenType == JsonTokenType.StartArray && utf8JsonReader.TokenType == JsonTokenType.EndArray && currentDepth == utf8JsonReader.CurrentDepth) + break; + + if (utf8JsonReader.TokenType == JsonTokenType.PropertyName && currentDepth == utf8JsonReader.CurrentDepth - 1) + { + string? localVarJsonPropertyName = utf8JsonReader.GetString(); + utf8JsonReader.Read(); + + switch (localVarJsonPropertyName) + { + case "fileCount": + fileCount = new Option(utf8JsonReader.TokenType == JsonTokenType.Null ? (int?)null : utf8JsonReader.GetInt32()); + break; + case "message": + message = new Option(utf8JsonReader.GetString()!); + break; + default: + break; + } + } + } + + if (fileCount.IsSet && fileCount.Value == null) + throw new ArgumentNullException(nameof(fileCount), "Property is not nullable for class UploadFiles200Response."); + + if (message.IsSet && message.Value == null) + throw new ArgumentNullException(nameof(message), "Property is not nullable for class UploadFiles200Response."); + + return new UploadFiles200Response(fileCount, message); + } + + /// + /// Serializes a + /// + /// + /// + /// + /// + public override void Write(Utf8JsonWriter writer, UploadFiles200Response uploadFiles200Response, JsonSerializerOptions jsonSerializerOptions) + { + writer.WriteStartObject(); + + WriteProperties(writer, uploadFiles200Response, jsonSerializerOptions); + writer.WriteEndObject(); + } + + /// + /// Serializes the properties of + /// + /// + /// + /// + /// + public void WriteProperties(Utf8JsonWriter writer, UploadFiles200Response uploadFiles200Response, JsonSerializerOptions jsonSerializerOptions) + { + if (uploadFiles200Response.MessageOption.IsSet && uploadFiles200Response.Message == null) + throw new ArgumentNullException(nameof(uploadFiles200Response.Message), "Property is required for class UploadFiles200Response."); + + if (uploadFiles200Response.FileCountOption.IsSet) + writer.WriteNumber("fileCount", uploadFiles200Response.FileCountOption.Value!.Value); + + if (uploadFiles200Response.MessageOption.IsSet) + writer.WriteString("message", uploadFiles200Response.Message); + } + } + + /// + /// The UploadFiles200ResponseSerializationContext + /// + [JsonSourceGenerationOptions(WriteIndented = true, GenerationMode = JsonSourceGenerationMode.Metadata | JsonSourceGenerationMode.Serialization)] + [JsonSerializable(typeof(UploadFiles200Response))] + public partial class UploadFiles200ResponseSerializationContext : JsonSerializerContext { } +} diff --git a/samples/client/petstore/csharp/generichost/net8/SourceGeneration/src/Org.OpenAPITools/README.md b/samples/client/petstore/csharp/generichost/net8/SourceGeneration/src/Org.OpenAPITools/README.md index 6b370c7bd33d..62be25ea883f 100644 --- a/samples/client/petstore/csharp/generichost/net8/SourceGeneration/src/Org.OpenAPITools/README.md +++ b/samples/client/petstore/csharp/generichost/net8/SourceGeneration/src/Org.OpenAPITools/README.md @@ -115,5 +115,5 @@ namespace YourProject This C# SDK is automatically generated by the [OpenAPI Generator](https://openapi-generator.tech) project. - SDK version: 1.0.0 -- Generator version: 7.14.0-SNAPSHOT +- Generator version: 7.14.0 - Build package: org.openapitools.codegen.languages.CSharpClientCodegen diff --git a/samples/client/petstore/csharp/generichost/net8/UseDateTimeForDate/.openapi-generator/VERSION b/samples/client/petstore/csharp/generichost/net8/UseDateTimeForDate/.openapi-generator/VERSION index 4c631cf217a2..e465da43155f 100644 --- a/samples/client/petstore/csharp/generichost/net8/UseDateTimeForDate/.openapi-generator/VERSION +++ b/samples/client/petstore/csharp/generichost/net8/UseDateTimeForDate/.openapi-generator/VERSION @@ -1 +1 @@ -7.14.0-SNAPSHOT +7.14.0 diff --git a/samples/client/petstore/csharp/generichost/net8/UseDateTimeForDate/src/Org.OpenAPITools/README.md b/samples/client/petstore/csharp/generichost/net8/UseDateTimeForDate/src/Org.OpenAPITools/README.md index bc3fce2b2416..52a3de74077d 100644 --- a/samples/client/petstore/csharp/generichost/net8/UseDateTimeForDate/src/Org.OpenAPITools/README.md +++ b/samples/client/petstore/csharp/generichost/net8/UseDateTimeForDate/src/Org.OpenAPITools/README.md @@ -107,5 +107,5 @@ namespace YourProject This C# SDK is automatically generated by the [OpenAPI Generator](https://openapi-generator.tech) project. - SDK version: 1.0.0 -- Generator version: 7.14.0-SNAPSHOT +- Generator version: 7.14.0 - Build package: org.openapitools.codegen.languages.CSharpClientCodegen diff --git a/samples/client/petstore/csharp/generichost/net9/AllOf/.openapi-generator/VERSION b/samples/client/petstore/csharp/generichost/net9/AllOf/.openapi-generator/VERSION index 4c631cf217a2..e465da43155f 100644 --- a/samples/client/petstore/csharp/generichost/net9/AllOf/.openapi-generator/VERSION +++ b/samples/client/petstore/csharp/generichost/net9/AllOf/.openapi-generator/VERSION @@ -1 +1 @@ -7.14.0-SNAPSHOT +7.14.0 diff --git a/samples/client/petstore/csharp/generichost/net9/AllOf/src/Org.OpenAPITools/README.md b/samples/client/petstore/csharp/generichost/net9/AllOf/src/Org.OpenAPITools/README.md index 08b187dece73..fe1cf043acb2 100644 --- a/samples/client/petstore/csharp/generichost/net9/AllOf/src/Org.OpenAPITools/README.md +++ b/samples/client/petstore/csharp/generichost/net9/AllOf/src/Org.OpenAPITools/README.md @@ -107,5 +107,5 @@ namespace YourProject This C# SDK is automatically generated by the [OpenAPI Generator](https://openapi-generator.tech) project. - SDK version: 1.0.0 -- Generator version: 7.14.0-SNAPSHOT +- Generator version: 7.14.0 - Build package: org.openapitools.codegen.languages.CSharpClientCodegen diff --git a/samples/client/petstore/csharp/generichost/net9/AnyOf/.openapi-generator/VERSION b/samples/client/petstore/csharp/generichost/net9/AnyOf/.openapi-generator/VERSION index 4c631cf217a2..e465da43155f 100644 --- a/samples/client/petstore/csharp/generichost/net9/AnyOf/.openapi-generator/VERSION +++ b/samples/client/petstore/csharp/generichost/net9/AnyOf/.openapi-generator/VERSION @@ -1 +1 @@ -7.14.0-SNAPSHOT +7.14.0 diff --git a/samples/client/petstore/csharp/generichost/net9/AnyOf/src/Org.OpenAPITools/README.md b/samples/client/petstore/csharp/generichost/net9/AnyOf/src/Org.OpenAPITools/README.md index 046e4088b567..8bfbb354edab 100644 --- a/samples/client/petstore/csharp/generichost/net9/AnyOf/src/Org.OpenAPITools/README.md +++ b/samples/client/petstore/csharp/generichost/net9/AnyOf/src/Org.OpenAPITools/README.md @@ -107,5 +107,5 @@ namespace YourProject This C# SDK is automatically generated by the [OpenAPI Generator](https://openapi-generator.tech) project. - SDK version: 1.0.0 -- Generator version: 7.14.0-SNAPSHOT +- Generator version: 7.14.0 - Build package: org.openapitools.codegen.languages.CSharpClientCodegen diff --git a/samples/client/petstore/csharp/generichost/net9/AnyOfNoCompare/.openapi-generator/VERSION b/samples/client/petstore/csharp/generichost/net9/AnyOfNoCompare/.openapi-generator/VERSION index 4c631cf217a2..e465da43155f 100644 --- a/samples/client/petstore/csharp/generichost/net9/AnyOfNoCompare/.openapi-generator/VERSION +++ b/samples/client/petstore/csharp/generichost/net9/AnyOfNoCompare/.openapi-generator/VERSION @@ -1 +1 @@ -7.14.0-SNAPSHOT +7.14.0 diff --git a/samples/client/petstore/csharp/generichost/net9/AnyOfNoCompare/src/Org.OpenAPITools/README.md b/samples/client/petstore/csharp/generichost/net9/AnyOfNoCompare/src/Org.OpenAPITools/README.md index 046e4088b567..8bfbb354edab 100644 --- a/samples/client/petstore/csharp/generichost/net9/AnyOfNoCompare/src/Org.OpenAPITools/README.md +++ b/samples/client/petstore/csharp/generichost/net9/AnyOfNoCompare/src/Org.OpenAPITools/README.md @@ -107,5 +107,5 @@ namespace YourProject This C# SDK is automatically generated by the [OpenAPI Generator](https://openapi-generator.tech) project. - SDK version: 1.0.0 -- Generator version: 7.14.0-SNAPSHOT +- Generator version: 7.14.0 - Build package: org.openapitools.codegen.languages.CSharpClientCodegen diff --git a/samples/client/petstore/csharp/generichost/net9/FormModels/.openapi-generator/FILES b/samples/client/petstore/csharp/generichost/net9/FormModels/.openapi-generator/FILES index 8062853cee64..f59db8bca5c1 100644 --- a/samples/client/petstore/csharp/generichost/net9/FormModels/.openapi-generator/FILES +++ b/samples/client/petstore/csharp/generichost/net9/FormModels/.openapi-generator/FILES @@ -130,6 +130,7 @@ docs/models/TestResult.md docs/models/TestResultCode.md docs/models/Triangle.md docs/models/TriangleInterface.md +docs/models/UploadFiles200Response.md docs/models/User.md docs/models/Whale.md docs/models/Zebra.md @@ -140,6 +141,7 @@ docs/models/ZeroBasedEnumClassZeroBasedEnum.md docs/scripts/git_push.ps1 docs/scripts/git_push.sh src/Org.OpenAPITools.Test/Api/DependencyInjectionTests.cs +src/Org.OpenAPITools.Test/Model/UploadFiles200ResponseTests.cs src/Org.OpenAPITools.Test/Org.OpenAPITools.Test.csproj src/Org.OpenAPITools.Test/README.md src/Org.OpenAPITools/Api/AnotherFakeApi.cs @@ -297,6 +299,7 @@ src/Org.OpenAPITools/Model/TestResult.cs src/Org.OpenAPITools/Model/TestResultCode.cs src/Org.OpenAPITools/Model/Triangle.cs src/Org.OpenAPITools/Model/TriangleInterface.cs +src/Org.OpenAPITools/Model/UploadFiles200Response.cs src/Org.OpenAPITools/Model/User.cs src/Org.OpenAPITools/Model/Whale.cs src/Org.OpenAPITools/Model/Zebra.cs diff --git a/samples/client/petstore/csharp/generichost/net9/FormModels/.openapi-generator/VERSION b/samples/client/petstore/csharp/generichost/net9/FormModels/.openapi-generator/VERSION index 4c631cf217a2..e465da43155f 100644 --- a/samples/client/petstore/csharp/generichost/net9/FormModels/.openapi-generator/VERSION +++ b/samples/client/petstore/csharp/generichost/net9/FormModels/.openapi-generator/VERSION @@ -1 +1 @@ -7.14.0-SNAPSHOT +7.14.0 diff --git a/samples/client/petstore/csharp/generichost/net9/FormModels/api/openapi.yaml b/samples/client/petstore/csharp/generichost/net9/FormModels/api/openapi.yaml index 3afd9359ab7d..4bd9bd7aa5fa 100644 --- a/samples/client/petstore/csharp/generichost/net9/FormModels/api/openapi.yaml +++ b/samples/client/petstore/csharp/generichost/net9/FormModels/api/openapi.yaml @@ -41,6 +41,23 @@ tags: - description: Operations about user name: user paths: + /upload: + post: + operationId: uploadFiles + requestBody: + content: + multipart/form-data: + schema: + $ref: "#/components/schemas/uploadFiles_request" + required: true + responses: + "200": + content: + application/json: + schema: + $ref: "#/components/schemas/uploadFiles_200_response" + description: Files uploaded successfully + summary: Upload multiple files /roles/report: get: responses: @@ -2684,6 +2701,26 @@ components: - APPROVED - MANUAL_APPROVAL_REQUIRED type: string + uploadFiles_request: + properties: + files: + items: + format: binary + type: string + type: array + required: + - files + type: object + uploadFiles_200_response: + example: + message: message + fileCount: 0 + properties: + message: + type: string + fileCount: + type: integer + type: object _foo_get_default_response: example: string: diff --git a/samples/client/petstore/csharp/generichost/net9/FormModels/docs/apis/DefaultApi.md b/samples/client/petstore/csharp/generichost/net9/FormModels/docs/apis/DefaultApi.md index e97541b8b6a5..0fa36d06dcaf 100644 --- a/samples/client/petstore/csharp/generichost/net9/FormModels/docs/apis/DefaultApi.md +++ b/samples/client/petstore/csharp/generichost/net9/FormModels/docs/apis/DefaultApi.md @@ -9,6 +9,7 @@ All URIs are relative to *http://petstore.swagger.io:80/v2* | [**Hello**](DefaultApi.md#hello) | **GET** /hello | Hello | | [**RolesReportGet**](DefaultApi.md#rolesreportget) | **GET** /roles/report | | | [**Test**](DefaultApi.md#test) | **GET** /test | Retrieve an existing Notificationtest's Elements | +| [**UploadFiles**](DefaultApi.md#uploadfiles) | **POST** /upload | Upload multiple files | # **FooGet** @@ -166,3 +167,37 @@ No authorization required [[Back to top]](#) [[Back to API list]](../../README.md#documentation-for-api-endpoints) [[Back to Model list]](../../README.md#documentation-for-models) [[Back to README]](../../README.md) + +# **UploadFiles** +> UploadFiles200Response UploadFiles (List files) + +Upload multiple files + + +### Parameters + +| Name | Type | Description | Notes | +|------|------|-------------|-------| +| **files** | **List<System.IO.Stream>** | | | + +### Return type + +[**UploadFiles200Response**](UploadFiles200Response.md) + +### Authorization + +No authorization required + +### HTTP request headers + + - **Content-Type**: multipart/form-data + - **Accept**: application/json + + +### HTTP response details +| Status code | Description | Response headers | +|-------------|-------------|------------------| +| **200** | Files uploaded successfully | - | + +[[Back to top]](#) [[Back to API list]](../../README.md#documentation-for-api-endpoints) [[Back to Model list]](../../README.md#documentation-for-models) [[Back to README]](../../README.md) + diff --git a/samples/client/petstore/csharp/generichost/net9/FormModels/docs/models/UploadFiles200Response.md b/samples/client/petstore/csharp/generichost/net9/FormModels/docs/models/UploadFiles200Response.md new file mode 100644 index 000000000000..8e32fc151b34 --- /dev/null +++ b/samples/client/petstore/csharp/generichost/net9/FormModels/docs/models/UploadFiles200Response.md @@ -0,0 +1,11 @@ +# Org.OpenAPITools.Model.UploadFiles200Response + +## Properties + +Name | Type | Description | Notes +------------ | ------------- | ------------- | ------------- +**FileCount** | **int** | | [optional] +**Message** | **string** | | [optional] + +[[Back to Model list]](../../README.md#documentation-for-models) [[Back to API list]](../../README.md#documentation-for-api-endpoints) [[Back to README]](../../README.md) + diff --git a/samples/client/petstore/csharp/generichost/net9/FormModels/src/Org.OpenAPITools.Test/Model/UploadFiles200ResponseTests.cs b/samples/client/petstore/csharp/generichost/net9/FormModels/src/Org.OpenAPITools.Test/Model/UploadFiles200ResponseTests.cs new file mode 100644 index 000000000000..e6003ac29cfe --- /dev/null +++ b/samples/client/petstore/csharp/generichost/net9/FormModels/src/Org.OpenAPITools.Test/Model/UploadFiles200ResponseTests.cs @@ -0,0 +1,74 @@ +/* + * OpenAPI Petstore + * + * This spec is mainly for testing Petstore server and contains fake endpoints, models. Please do not use this for any other purpose. Special characters: \" \\ + * + * The version of the OpenAPI document: 1.0.0 + * Generated by: https://github.com/openapitools/openapi-generator.git + */ + + +using Xunit; + +using System; +using System.Linq; +using System.IO; +using System.Collections.Generic; +using Org.OpenAPITools.Model; +using Org.OpenAPITools.Client; +using System.Reflection; + +namespace Org.OpenAPITools.Test.Model +{ + /// + /// Class for testing UploadFiles200Response + /// + /// + /// This file is automatically generated by OpenAPI Generator (https://openapi-generator.tech). + /// Please update the test case below to test the model. + /// + public class UploadFiles200ResponseTests : IDisposable + { + // TODO uncomment below to declare an instance variable for UploadFiles200Response + //private UploadFiles200Response instance; + + public UploadFiles200ResponseTests() + { + // TODO uncomment below to create an instance of UploadFiles200Response + //instance = new UploadFiles200Response(); + } + + public void Dispose() + { + // Cleanup when everything is done. + } + + /// + /// Test an instance of UploadFiles200Response + /// + [Fact] + public void UploadFiles200ResponseInstanceTest() + { + // TODO uncomment below to test "IsType" UploadFiles200Response + //Assert.IsType(instance); + } + + /// + /// Test the property 'FileCount' + /// + [Fact] + public void FileCountTest() + { + // TODO unit test for the property 'FileCount' + } + + /// + /// Test the property 'Message' + /// + [Fact] + public void MessageTest() + { + // TODO unit test for the property 'Message' + } + } +} diff --git a/samples/client/petstore/csharp/generichost/net9/FormModels/src/Org.OpenAPITools/Api/DefaultApi.cs b/samples/client/petstore/csharp/generichost/net9/FormModels/src/Org.OpenAPITools/Api/DefaultApi.cs index b26e51c70f3b..b3303666acac 100644 --- a/samples/client/petstore/csharp/generichost/net9/FormModels/src/Org.OpenAPITools/Api/DefaultApi.cs +++ b/samples/client/petstore/csharp/generichost/net9/FormModels/src/Org.OpenAPITools/Api/DefaultApi.cs @@ -139,6 +139,29 @@ public interface IDefaultApi : IApi /// Cancellation Token to cancel the request. /// <> Task TestOrDefaultAsync(System.Threading.CancellationToken cancellationToken = default); + + /// + /// Upload multiple files + /// + /// + /// + /// + /// Thrown when fails to make API call + /// + /// Cancellation Token to cancel the request. + /// <> + Task UploadFilesAsync(List files, System.Threading.CancellationToken cancellationToken = default); + + /// + /// Upload multiple files + /// + /// + /// + /// + /// + /// Cancellation Token to cancel the request. + /// <> + Task UploadFilesOrDefaultAsync(List files, System.Threading.CancellationToken cancellationToken = default); } /// @@ -201,6 +224,18 @@ public interface ITestApiResponse : Org.OpenAPITools.Client.IApiResponse, IOk + /// The + /// + public interface IUploadFilesApiResponse : Org.OpenAPITools.Client.IApiResponse, IOk + { + /// + /// Returns true if the response is 200 Ok + /// + /// + bool IsOk { get; } + } + /// /// Represents a collection of functions to interact with the API endpoints /// @@ -305,6 +340,26 @@ internal void ExecuteOnErrorTest(Exception exception) { OnErrorTest?.Invoke(this, new ExceptionEventArgs(exception)); } + + /// + /// The event raised after the server response + /// + public event EventHandler OnUploadFiles; + + /// + /// The event raised after an error querying the server + /// + public event EventHandler OnErrorUploadFiles; + + internal void ExecuteOnUploadFiles(DefaultApi.UploadFilesApiResponse apiResponse) + { + OnUploadFiles?.Invoke(this, new ApiResponseEventArgs(apiResponse)); + } + + internal void ExecuteOnErrorUploadFiles(Exception exception) + { + OnErrorUploadFiles?.Invoke(this, new ExceptionEventArgs(exception)); + } } /// @@ -1362,5 +1417,252 @@ private void OnDeserializationErrorDefaultImplementation(Exception exception, Ht partial void OnDeserializationError(ref bool suppressDefaultLog, Exception exception, HttpStatusCode httpStatusCode); } + + partial void FormatUploadFiles(List files); + + /// + /// Validates the request parameters + /// + /// + /// + private void ValidateUploadFiles(List files) + { + if (files == null) + throw new ArgumentNullException(nameof(files)); + } + + /// + /// Processes the server response + /// + /// + /// + private void AfterUploadFilesDefaultImplementation(IUploadFilesApiResponse apiResponseLocalVar, List files) + { + bool suppressDefaultLog = false; + AfterUploadFiles(ref suppressDefaultLog, apiResponseLocalVar, files); + if (!suppressDefaultLog) + Logger.LogInformation("{0,-9} | {1} | {3}", (apiResponseLocalVar.DownloadedAt - apiResponseLocalVar.RequestedAt).TotalSeconds, apiResponseLocalVar.StatusCode, apiResponseLocalVar.Path); + } + + /// + /// Processes the server response + /// + /// + /// + /// + partial void AfterUploadFiles(ref bool suppressDefaultLog, IUploadFilesApiResponse apiResponseLocalVar, List files); + + /// + /// Logs exceptions that occur while retrieving the server response + /// + /// + /// + /// + /// + private void OnErrorUploadFilesDefaultImplementation(Exception exceptionLocalVar, string pathFormatLocalVar, string pathLocalVar, List files) + { + bool suppressDefaultLogLocalVar = false; + OnErrorUploadFiles(ref suppressDefaultLogLocalVar, exceptionLocalVar, pathFormatLocalVar, pathLocalVar, files); + if (!suppressDefaultLogLocalVar) + Logger.LogError(exceptionLocalVar, "An error occurred while sending the request to the server."); + } + + /// + /// A partial method that gives developers a way to provide customized exception handling + /// + /// + /// + /// + /// + /// + partial void OnErrorUploadFiles(ref bool suppressDefaultLogLocalVar, Exception exceptionLocalVar, string pathFormatLocalVar, string pathLocalVar, List files); + + /// + /// Upload multiple files + /// + /// + /// Cancellation Token to cancel the request. + /// <> + public async Task UploadFilesOrDefaultAsync(List files, System.Threading.CancellationToken cancellationToken = default) + { + try + { + return await UploadFilesAsync(files, cancellationToken).ConfigureAwait(false); + } + catch (Exception) + { + return null; + } + } + + /// + /// Upload multiple files + /// + /// Thrown when fails to make API call + /// + /// Cancellation Token to cancel the request. + /// <> + public async Task UploadFilesAsync(List files, System.Threading.CancellationToken cancellationToken = default) + { + UriBuilder uriBuilderLocalVar = new UriBuilder(); + + try + { + ValidateUploadFiles(files); + + FormatUploadFiles(files); + + using (HttpRequestMessage httpRequestMessageLocalVar = new HttpRequestMessage()) + { + uriBuilderLocalVar.Host = HttpClient.BaseAddress.Host; + uriBuilderLocalVar.Port = HttpClient.BaseAddress.Port; + uriBuilderLocalVar.Scheme = HttpClient.BaseAddress.Scheme; + uriBuilderLocalVar.Path = HttpClient.BaseAddress.AbsolutePath == "/" + ? "/upload" + : string.Concat(HttpClient.BaseAddress.AbsolutePath, "/upload"); + + MultipartContent multipartContentLocalVar = new MultipartContent(); + + httpRequestMessageLocalVar.Content = multipartContentLocalVar; + + List> formParameterLocalVars = new List>(); + + multipartContentLocalVar.Add(new FormUrlEncodedContent(formParameterLocalVars)); + + foreach (global::System.IO.Stream streamLocalVar in files) + { + 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); + } + + httpRequestMessageLocalVar.RequestUri = uriBuilderLocalVar.Uri; + + string[] contentTypes = new string[] { + "multipart/form-data" + }; + + string contentTypeLocalVar = ClientUtils.SelectHeaderContentType(contentTypes); + + if (contentTypeLocalVar != null && httpRequestMessageLocalVar.Content != null) + httpRequestMessageLocalVar.Content.Headers.ContentType = new MediaTypeHeaderValue(contentTypeLocalVar); + + string[] acceptLocalVars = new string[] { + "application/json" + }; + + string acceptLocalVar = ClientUtils.SelectHeaderAccept(acceptLocalVars); + + if (acceptLocalVar != null) + httpRequestMessageLocalVar.Headers.Accept.Add(new MediaTypeWithQualityHeaderValue(acceptLocalVar)); + + httpRequestMessageLocalVar.Method = HttpMethod.Post; + + DateTime requestedAtLocalVar = DateTime.UtcNow; + + using (HttpResponseMessage httpResponseMessageLocalVar = await HttpClient.SendAsync(httpRequestMessageLocalVar, cancellationToken).ConfigureAwait(false)) + { + string responseContentLocalVar = await httpResponseMessageLocalVar.Content.ReadAsStringAsync(cancellationToken).ConfigureAwait(false); + + ILogger apiResponseLoggerLocalVar = LoggerFactory.CreateLogger(); + + UploadFilesApiResponse apiResponseLocalVar = new(apiResponseLoggerLocalVar, httpRequestMessageLocalVar, httpResponseMessageLocalVar, responseContentLocalVar, "/upload", requestedAtLocalVar, _jsonSerializerOptions); + + AfterUploadFilesDefaultImplementation(apiResponseLocalVar, files); + + Events.ExecuteOnUploadFiles(apiResponseLocalVar); + + return apiResponseLocalVar; + } + } + } + catch(Exception e) + { + OnErrorUploadFilesDefaultImplementation(e, "/upload", uriBuilderLocalVar.Path, files); + Events.ExecuteOnErrorUploadFiles(e); + throw; + } + } + + /// + /// The + /// + public partial class UploadFilesApiResponse : Org.OpenAPITools.Client.ApiResponse, IUploadFilesApiResponse + { + /// + /// The logger + /// + public ILogger Logger { get; } + + /// + /// The + /// + /// + /// + /// + /// + /// + /// + /// + public UploadFilesApiResponse(ILogger logger, System.Net.Http.HttpRequestMessage httpRequestMessage, System.Net.Http.HttpResponseMessage httpResponseMessage, string rawContent, string path, DateTime requestedAt, System.Text.Json.JsonSerializerOptions jsonSerializerOptions) : base(httpRequestMessage, httpResponseMessage, rawContent, path, requestedAt, jsonSerializerOptions) + { + Logger = logger; + OnCreated(httpRequestMessage, httpResponseMessage); + } + + partial void OnCreated(global::System.Net.Http.HttpRequestMessage httpRequestMessage, System.Net.Http.HttpResponseMessage httpResponseMessage); + + /// + /// Returns true if the response is 200 Ok + /// + /// + public bool IsOk => 200 == (int)StatusCode; + + /// + /// Deserializes the response if the response is 200 Ok + /// + /// + public Org.OpenAPITools.Model.UploadFiles200Response Ok() + { + // This logic may be modified with the AsModel.mustache template + return IsOk + ? System.Text.Json.JsonSerializer.Deserialize(RawContent, _jsonSerializerOptions) + : null; + } + + /// + /// Returns true if the response is 200 Ok and the deserialized response is not null + /// + /// + /// + public bool TryOk([NotNullWhen(true)]out Org.OpenAPITools.Model.UploadFiles200Response result) + { + result = null; + + try + { + result = Ok(); + } catch (Exception e) + { + OnDeserializationErrorDefaultImplementation(e, (HttpStatusCode)200); + } + + return result != null; + } + + private void OnDeserializationErrorDefaultImplementation(Exception exception, HttpStatusCode httpStatusCode) + { + bool suppressDefaultLog = false; + OnDeserializationError(ref suppressDefaultLog, exception, httpStatusCode); + if (!suppressDefaultLog) + Logger.LogError(exception, "An error occurred while deserializing the {code} response.", httpStatusCode); + } + + partial void OnDeserializationError(ref bool suppressDefaultLog, Exception exception, HttpStatusCode httpStatusCode); + } } } diff --git a/samples/client/petstore/csharp/generichost/net9/FormModels/src/Org.OpenAPITools/Api/FakeApi.cs b/samples/client/petstore/csharp/generichost/net9/FormModels/src/Org.OpenAPITools/Api/FakeApi.cs index 43aa6ec43f9c..6efd9647c185 100644 --- a/samples/client/petstore/csharp/generichost/net9/FormModels/src/Org.OpenAPITools/Api/FakeApi.cs +++ b/samples/client/petstore/csharp/generichost/net9/FormModels/src/Org.OpenAPITools/Api/FakeApi.cs @@ -4033,7 +4033,6 @@ public async Task TestEndpointParametersAsyn if (binary.IsSet) multipartContentLocalVar.Add(new StreamContent(binary.Value)); - if (callback.IsSet) formParameterLocalVars.Add(new KeyValuePair("callback", ClientUtils.ParameterToString(callback.Value))); @@ -4343,7 +4342,9 @@ public async Task TestEnumParametersAsync(Option List> formParameterLocalVars = new List>(); - multipartContentLocalVar.Add(new FormUrlEncodedContent(formParameterLocalVars)); if (enumFormString.IsSet) + multipartContentLocalVar.Add(new FormUrlEncodedContent(formParameterLocalVars)); + + if (enumFormString.IsSet) formParameterLocalVars.Add(new KeyValuePair("enum_form_string", ClientUtils.ParameterToString(enumFormString.Value))); if (enumFormStringArray.IsSet) diff --git a/samples/client/petstore/csharp/generichost/net9/FormModels/src/Org.OpenAPITools/Api/PetApi.cs b/samples/client/petstore/csharp/generichost/net9/FormModels/src/Org.OpenAPITools/Api/PetApi.cs index 37ebd2fc29af..1a70ab2baf85 100644 --- a/samples/client/petstore/csharp/generichost/net9/FormModels/src/Org.OpenAPITools/Api/PetApi.cs +++ b/samples/client/petstore/csharp/generichost/net9/FormModels/src/Org.OpenAPITools/Api/PetApi.cs @@ -2202,7 +2202,9 @@ public async Task UpdatePetWithFormAsync(long pet List> formParameterLocalVars = new List>(); - multipartContentLocalVar.Add(new FormUrlEncodedContent(formParameterLocalVars)); if (name.IsSet) + multipartContentLocalVar.Add(new FormUrlEncodedContent(formParameterLocalVars)); + + if (name.IsSet) formParameterLocalVars.Add(new KeyValuePair("name", ClientUtils.ParameterToString(name.Value))); if (status.IsSet) @@ -2429,12 +2431,13 @@ public async Task UploadFileAsync(long petId, Option> formParameterLocalVars = new List>(); - multipartContentLocalVar.Add(new FormUrlEncodedContent(formParameterLocalVars)); if (additionalMetadata.IsSet) + multipartContentLocalVar.Add(new FormUrlEncodedContent(formParameterLocalVars)); + + if (additionalMetadata.IsSet) formParameterLocalVars.Add(new KeyValuePair("additionalMetadata", ClientUtils.ParameterToString(additionalMetadata.Value))); if (file.IsSet) multipartContentLocalVar.Add(new StreamContent(file.Value)); - List tokenBaseLocalVars = new List(); httpRequestMessageLocalVar.RequestUri = uriBuilderLocalVar.Uri; @@ -2697,7 +2700,9 @@ public async Task UploadFileWithRequired List> formParameterLocalVars = new List>(); - multipartContentLocalVar.Add(new FormUrlEncodedContent(formParameterLocalVars)); multipartContentLocalVar.Add(new StreamContent(requiredFile)); + multipartContentLocalVar.Add(new FormUrlEncodedContent(formParameterLocalVars)); + + multipartContentLocalVar.Add(new StreamContent(requiredFile)); if (additionalMetadata.IsSet) formParameterLocalVars.Add(new KeyValuePair("additionalMetadata", ClientUtils.ParameterToString(additionalMetadata.Value))); diff --git a/samples/client/petstore/csharp/generichost/net9/FormModels/src/Org.OpenAPITools/Client/HostConfiguration.cs b/samples/client/petstore/csharp/generichost/net9/FormModels/src/Org.OpenAPITools/Client/HostConfiguration.cs index 2c2b9348011f..d448ea1b4702 100644 --- a/samples/client/petstore/csharp/generichost/net9/FormModels/src/Org.OpenAPITools/Client/HostConfiguration.cs +++ b/samples/client/petstore/csharp/generichost/net9/FormModels/src/Org.OpenAPITools/Client/HostConfiguration.cs @@ -190,6 +190,7 @@ public HostConfiguration(IServiceCollection services) _jsonOptions.Converters.Add(new TestResultCodeNullableJsonConverter()); _jsonOptions.Converters.Add(new TriangleJsonConverter()); _jsonOptions.Converters.Add(new TriangleInterfaceJsonConverter()); + _jsonOptions.Converters.Add(new UploadFiles200ResponseJsonConverter()); _jsonOptions.Converters.Add(new UserJsonConverter()); _jsonOptions.Converters.Add(new WhaleJsonConverter()); _jsonOptions.Converters.Add(new ZebraJsonConverter()); diff --git a/samples/client/petstore/csharp/generichost/net9/FormModels/src/Org.OpenAPITools/Model/UploadFiles200Response.cs b/samples/client/petstore/csharp/generichost/net9/FormModels/src/Org.OpenAPITools/Model/UploadFiles200Response.cs new file mode 100644 index 000000000000..4dc38200f1ef --- /dev/null +++ b/samples/client/petstore/csharp/generichost/net9/FormModels/src/Org.OpenAPITools/Model/UploadFiles200Response.cs @@ -0,0 +1,200 @@ +// +/* + * OpenAPI Petstore + * + * This spec is mainly for testing Petstore server and contains fake endpoints, models. Please do not use this for any other purpose. Special characters: \" \\ + * + * The version of the OpenAPI document: 1.0.0 + * Generated by: https://github.com/openapitools/openapi-generator.git + */ + +using System; +using System.Collections; +using System.Collections.Generic; +using System.Collections.ObjectModel; +using System.Linq; +using System.IO; +using System.Text; +using System.Text.RegularExpressions; +using System.Text.Json; +using System.Text.Json.Serialization; +using System.ComponentModel.DataAnnotations; +using OpenAPIClientUtils = Org.OpenAPITools.Client.ClientUtils; +using Org.OpenAPITools.Client; + +namespace Org.OpenAPITools.Model +{ + /// + /// UploadFiles200Response + /// + public partial class UploadFiles200Response : IValidatableObject + { + /// + /// Initializes a new instance of the class. + /// + /// fileCount + /// message + [JsonConstructor] + public UploadFiles200Response(Option fileCount = default, Option message = default) + { + FileCountOption = fileCount; + MessageOption = message; + OnCreated(); + } + + partial void OnCreated(); + + /// + /// Used to track the state of FileCount + /// + [JsonIgnore] + [global::System.ComponentModel.EditorBrowsable(global::System.ComponentModel.EditorBrowsableState.Never)] + public Option FileCountOption { get; private set; } + + /// + /// Gets or Sets FileCount + /// + [JsonPropertyName("fileCount")] + public int? FileCount { get { return this.FileCountOption; } set { this.FileCountOption = new(value); } } + + /// + /// Used to track the state of Message + /// + [JsonIgnore] + [global::System.ComponentModel.EditorBrowsable(global::System.ComponentModel.EditorBrowsableState.Never)] + public Option MessageOption { get; private set; } + + /// + /// Gets or Sets Message + /// + [JsonPropertyName("message")] + public string Message { get { return this.MessageOption; } set { this.MessageOption = new(value); } } + + /// + /// Gets or Sets additional properties + /// + [JsonExtensionData] + public Dictionary AdditionalProperties { get; } = new Dictionary(); + + /// + /// Returns the string presentation of the object + /// + /// String presentation of the object + public override string ToString() + { + StringBuilder sb = new StringBuilder(); + sb.Append("class UploadFiles200Response {\n"); + sb.Append(" FileCount: ").Append(FileCount).Append("\n"); + sb.Append(" Message: ").Append(Message).Append("\n"); + sb.Append(" AdditionalProperties: ").Append(AdditionalProperties).Append("\n"); + sb.Append("}\n"); + return sb.ToString(); + } + + /// + /// To validate all properties of the instance + /// + /// Validation context + /// Validation Result + IEnumerable IValidatableObject.Validate(ValidationContext validationContext) + { + yield break; + } + } + + /// + /// A Json converter for type + /// + public class UploadFiles200ResponseJsonConverter : JsonConverter + { + /// + /// Deserializes json to + /// + /// + /// + /// + /// + /// + public override UploadFiles200Response Read(ref Utf8JsonReader utf8JsonReader, Type typeToConvert, JsonSerializerOptions jsonSerializerOptions) + { + int currentDepth = utf8JsonReader.CurrentDepth; + + if (utf8JsonReader.TokenType != JsonTokenType.StartObject && utf8JsonReader.TokenType != JsonTokenType.StartArray) + throw new JsonException(); + + JsonTokenType startingTokenType = utf8JsonReader.TokenType; + + Option fileCount = default; + Option message = default; + + while (utf8JsonReader.Read()) + { + if (startingTokenType == JsonTokenType.StartObject && utf8JsonReader.TokenType == JsonTokenType.EndObject && currentDepth == utf8JsonReader.CurrentDepth) + break; + + if (startingTokenType == JsonTokenType.StartArray && utf8JsonReader.TokenType == JsonTokenType.EndArray && currentDepth == utf8JsonReader.CurrentDepth) + break; + + if (utf8JsonReader.TokenType == JsonTokenType.PropertyName && currentDepth == utf8JsonReader.CurrentDepth - 1) + { + string localVarJsonPropertyName = utf8JsonReader.GetString(); + utf8JsonReader.Read(); + + switch (localVarJsonPropertyName) + { + case "fileCount": + fileCount = new Option(utf8JsonReader.TokenType == JsonTokenType.Null ? (int?)null : utf8JsonReader.GetInt32()); + break; + case "message": + message = new Option(utf8JsonReader.GetString()); + break; + default: + break; + } + } + } + + if (fileCount.IsSet && fileCount.Value == null) + throw new ArgumentNullException(nameof(fileCount), "Property is not nullable for class UploadFiles200Response."); + + if (message.IsSet && message.Value == null) + throw new ArgumentNullException(nameof(message), "Property is not nullable for class UploadFiles200Response."); + + return new UploadFiles200Response(fileCount, message); + } + + /// + /// Serializes a + /// + /// + /// + /// + /// + public override void Write(Utf8JsonWriter writer, UploadFiles200Response uploadFiles200Response, JsonSerializerOptions jsonSerializerOptions) + { + writer.WriteStartObject(); + + WriteProperties(writer, uploadFiles200Response, jsonSerializerOptions); + writer.WriteEndObject(); + } + + /// + /// Serializes the properties of + /// + /// + /// + /// + /// + public void WriteProperties(Utf8JsonWriter writer, UploadFiles200Response uploadFiles200Response, JsonSerializerOptions jsonSerializerOptions) + { + if (uploadFiles200Response.MessageOption.IsSet && uploadFiles200Response.Message == null) + throw new ArgumentNullException(nameof(uploadFiles200Response.Message), "Property is required for class UploadFiles200Response."); + + if (uploadFiles200Response.FileCountOption.IsSet) + writer.WriteNumber("fileCount", uploadFiles200Response.FileCountOption.Value.Value); + + if (uploadFiles200Response.MessageOption.IsSet) + writer.WriteString("message", uploadFiles200Response.Message); + } + } +} diff --git a/samples/client/petstore/csharp/generichost/net9/FormModels/src/Org.OpenAPITools/README.md b/samples/client/petstore/csharp/generichost/net9/FormModels/src/Org.OpenAPITools/README.md index 80f8c6bea340..c4d7b255ae76 100644 --- a/samples/client/petstore/csharp/generichost/net9/FormModels/src/Org.OpenAPITools/README.md +++ b/samples/client/petstore/csharp/generichost/net9/FormModels/src/Org.OpenAPITools/README.md @@ -115,5 +115,5 @@ namespace YourProject This C# SDK is automatically generated by the [OpenAPI Generator](https://openapi-generator.tech) project. - SDK version: 1.0.0 -- Generator version: 7.14.0-SNAPSHOT +- Generator version: 7.14.0 - Build package: org.openapitools.codegen.languages.CSharpClientCodegen diff --git a/samples/client/petstore/csharp/generichost/net9/NullReferenceTypes/.openapi-generator/FILES b/samples/client/petstore/csharp/generichost/net9/NullReferenceTypes/.openapi-generator/FILES index ab28c754b4b1..b1a86728dc6c 100644 --- a/samples/client/petstore/csharp/generichost/net9/NullReferenceTypes/.openapi-generator/FILES +++ b/samples/client/petstore/csharp/generichost/net9/NullReferenceTypes/.openapi-generator/FILES @@ -108,6 +108,7 @@ docs/models/TestResult.md docs/models/TestResultCode.md docs/models/Triangle.md docs/models/TriangleInterface.md +docs/models/UploadFiles200Response.md docs/models/User.md docs/models/Whale.md docs/models/Zebra.md @@ -116,6 +117,7 @@ docs/models/ZeroBasedEnumClass.md docs/scripts/git_push.ps1 docs/scripts/git_push.sh src/Org.OpenAPITools.Test/Api/DependencyInjectionTests.cs +src/Org.OpenAPITools.Test/Model/UploadFiles200ResponseTests.cs src/Org.OpenAPITools.Test/Org.OpenAPITools.Test.csproj src/Org.OpenAPITools.Test/README.md src/Org.OpenAPITools/Api/AnotherFakeApi.cs @@ -251,6 +253,7 @@ src/Org.OpenAPITools/Model/TestResult.cs src/Org.OpenAPITools/Model/TestResultCode.cs src/Org.OpenAPITools/Model/Triangle.cs src/Org.OpenAPITools/Model/TriangleInterface.cs +src/Org.OpenAPITools/Model/UploadFiles200Response.cs src/Org.OpenAPITools/Model/User.cs src/Org.OpenAPITools/Model/Whale.cs src/Org.OpenAPITools/Model/Zebra.cs diff --git a/samples/client/petstore/csharp/generichost/net9/NullReferenceTypes/.openapi-generator/VERSION b/samples/client/petstore/csharp/generichost/net9/NullReferenceTypes/.openapi-generator/VERSION index 4c631cf217a2..e465da43155f 100644 --- a/samples/client/petstore/csharp/generichost/net9/NullReferenceTypes/.openapi-generator/VERSION +++ b/samples/client/petstore/csharp/generichost/net9/NullReferenceTypes/.openapi-generator/VERSION @@ -1 +1 @@ -7.14.0-SNAPSHOT +7.14.0 diff --git a/samples/client/petstore/csharp/generichost/net9/NullReferenceTypes/api/openapi.yaml b/samples/client/petstore/csharp/generichost/net9/NullReferenceTypes/api/openapi.yaml index d86a1d2f6d87..276850a46bc1 100644 --- a/samples/client/petstore/csharp/generichost/net9/NullReferenceTypes/api/openapi.yaml +++ b/samples/client/petstore/csharp/generichost/net9/NullReferenceTypes/api/openapi.yaml @@ -41,6 +41,23 @@ tags: - description: Operations about user name: user paths: + /upload: + post: + operationId: uploadFiles + requestBody: + content: + multipart/form-data: + schema: + $ref: "#/components/schemas/uploadFiles_request" + required: true + responses: + "200": + content: + application/json: + schema: + $ref: "#/components/schemas/uploadFiles_200_response" + description: Files uploaded successfully + summary: Upload multiple files /roles/report: get: responses: @@ -2865,6 +2882,26 @@ components: - APPROVED - MANUAL_APPROVAL_REQUIRED type: string + uploadFiles_request: + properties: + files: + items: + format: binary + type: string + type: array + required: + - files + type: object + uploadFiles_200_response: + example: + message: message + fileCount: 0 + properties: + message: + type: string + fileCount: + type: integer + type: object _foo_get_default_response: example: string: diff --git a/samples/client/petstore/csharp/generichost/net9/NullReferenceTypes/docs/apis/DefaultApi.md b/samples/client/petstore/csharp/generichost/net9/NullReferenceTypes/docs/apis/DefaultApi.md index e97541b8b6a5..0fa36d06dcaf 100644 --- a/samples/client/petstore/csharp/generichost/net9/NullReferenceTypes/docs/apis/DefaultApi.md +++ b/samples/client/petstore/csharp/generichost/net9/NullReferenceTypes/docs/apis/DefaultApi.md @@ -9,6 +9,7 @@ All URIs are relative to *http://petstore.swagger.io:80/v2* | [**Hello**](DefaultApi.md#hello) | **GET** /hello | Hello | | [**RolesReportGet**](DefaultApi.md#rolesreportget) | **GET** /roles/report | | | [**Test**](DefaultApi.md#test) | **GET** /test | Retrieve an existing Notificationtest's Elements | +| [**UploadFiles**](DefaultApi.md#uploadfiles) | **POST** /upload | Upload multiple files | # **FooGet** @@ -166,3 +167,37 @@ No authorization required [[Back to top]](#) [[Back to API list]](../../README.md#documentation-for-api-endpoints) [[Back to Model list]](../../README.md#documentation-for-models) [[Back to README]](../../README.md) + +# **UploadFiles** +> UploadFiles200Response UploadFiles (List files) + +Upload multiple files + + +### Parameters + +| Name | Type | Description | Notes | +|------|------|-------------|-------| +| **files** | **List<System.IO.Stream>** | | | + +### Return type + +[**UploadFiles200Response**](UploadFiles200Response.md) + +### Authorization + +No authorization required + +### HTTP request headers + + - **Content-Type**: multipart/form-data + - **Accept**: application/json + + +### HTTP response details +| Status code | Description | Response headers | +|-------------|-------------|------------------| +| **200** | Files uploaded successfully | - | + +[[Back to top]](#) [[Back to API list]](../../README.md#documentation-for-api-endpoints) [[Back to Model list]](../../README.md#documentation-for-models) [[Back to README]](../../README.md) + diff --git a/samples/client/petstore/csharp/generichost/net9/NullReferenceTypes/docs/models/UploadFiles200Response.md b/samples/client/petstore/csharp/generichost/net9/NullReferenceTypes/docs/models/UploadFiles200Response.md new file mode 100644 index 000000000000..8e32fc151b34 --- /dev/null +++ b/samples/client/petstore/csharp/generichost/net9/NullReferenceTypes/docs/models/UploadFiles200Response.md @@ -0,0 +1,11 @@ +# Org.OpenAPITools.Model.UploadFiles200Response + +## Properties + +Name | Type | Description | Notes +------------ | ------------- | ------------- | ------------- +**FileCount** | **int** | | [optional] +**Message** | **string** | | [optional] + +[[Back to Model list]](../../README.md#documentation-for-models) [[Back to API list]](../../README.md#documentation-for-api-endpoints) [[Back to README]](../../README.md) + diff --git a/samples/client/petstore/csharp/generichost/net9/NullReferenceTypes/src/Org.OpenAPITools.Test/Model/UploadFiles200ResponseTests.cs b/samples/client/petstore/csharp/generichost/net9/NullReferenceTypes/src/Org.OpenAPITools.Test/Model/UploadFiles200ResponseTests.cs new file mode 100644 index 000000000000..e6003ac29cfe --- /dev/null +++ b/samples/client/petstore/csharp/generichost/net9/NullReferenceTypes/src/Org.OpenAPITools.Test/Model/UploadFiles200ResponseTests.cs @@ -0,0 +1,74 @@ +/* + * OpenAPI Petstore + * + * This spec is mainly for testing Petstore server and contains fake endpoints, models. Please do not use this for any other purpose. Special characters: \" \\ + * + * The version of the OpenAPI document: 1.0.0 + * Generated by: https://github.com/openapitools/openapi-generator.git + */ + + +using Xunit; + +using System; +using System.Linq; +using System.IO; +using System.Collections.Generic; +using Org.OpenAPITools.Model; +using Org.OpenAPITools.Client; +using System.Reflection; + +namespace Org.OpenAPITools.Test.Model +{ + /// + /// Class for testing UploadFiles200Response + /// + /// + /// This file is automatically generated by OpenAPI Generator (https://openapi-generator.tech). + /// Please update the test case below to test the model. + /// + public class UploadFiles200ResponseTests : IDisposable + { + // TODO uncomment below to declare an instance variable for UploadFiles200Response + //private UploadFiles200Response instance; + + public UploadFiles200ResponseTests() + { + // TODO uncomment below to create an instance of UploadFiles200Response + //instance = new UploadFiles200Response(); + } + + public void Dispose() + { + // Cleanup when everything is done. + } + + /// + /// Test an instance of UploadFiles200Response + /// + [Fact] + public void UploadFiles200ResponseInstanceTest() + { + // TODO uncomment below to test "IsType" UploadFiles200Response + //Assert.IsType(instance); + } + + /// + /// Test the property 'FileCount' + /// + [Fact] + public void FileCountTest() + { + // TODO unit test for the property 'FileCount' + } + + /// + /// Test the property 'Message' + /// + [Fact] + public void MessageTest() + { + // TODO unit test for the property 'Message' + } + } +} diff --git a/samples/client/petstore/csharp/generichost/net9/NullReferenceTypes/src/Org.OpenAPITools/Api/DefaultApi.cs b/samples/client/petstore/csharp/generichost/net9/NullReferenceTypes/src/Org.OpenAPITools/Api/DefaultApi.cs index 545c65127912..56f47ba8f94c 100644 --- a/samples/client/petstore/csharp/generichost/net9/NullReferenceTypes/src/Org.OpenAPITools/Api/DefaultApi.cs +++ b/samples/client/petstore/csharp/generichost/net9/NullReferenceTypes/src/Org.OpenAPITools/Api/DefaultApi.cs @@ -141,6 +141,29 @@ public interface IDefaultApi : IApi /// Cancellation Token to cancel the request. /// <?> Task TestOrDefaultAsync(System.Threading.CancellationToken cancellationToken = default); + + /// + /// Upload multiple files + /// + /// + /// + /// + /// Thrown when fails to make API call + /// + /// Cancellation Token to cancel the request. + /// <> + Task UploadFilesAsync(List files, System.Threading.CancellationToken cancellationToken = default); + + /// + /// Upload multiple files + /// + /// + /// + /// + /// + /// Cancellation Token to cancel the request. + /// <?> + Task UploadFilesOrDefaultAsync(List files, System.Threading.CancellationToken cancellationToken = default); } /// @@ -203,6 +226,18 @@ public interface ITestApiResponse : Org.OpenAPITools.Client.IApiResponse, IOk + /// The + /// + public interface IUploadFilesApiResponse : Org.OpenAPITools.Client.IApiResponse, IOk + { + /// + /// Returns true if the response is 200 Ok + /// + /// + bool IsOk { get; } + } + /// /// Represents a collection of functions to interact with the API endpoints /// @@ -307,6 +342,26 @@ internal void ExecuteOnErrorTest(Exception exception) { OnErrorTest?.Invoke(this, new ExceptionEventArgs(exception)); } + + /// + /// The event raised after the server response + /// + public event EventHandler? OnUploadFiles; + + /// + /// The event raised after an error querying the server + /// + public event EventHandler? OnErrorUploadFiles; + + internal void ExecuteOnUploadFiles(DefaultApi.UploadFilesApiResponse apiResponse) + { + OnUploadFiles?.Invoke(this, new ApiResponseEventArgs(apiResponse)); + } + + internal void ExecuteOnErrorUploadFiles(Exception exception) + { + OnErrorUploadFiles?.Invoke(this, new ExceptionEventArgs(exception)); + } } /// @@ -1364,5 +1419,252 @@ private void OnDeserializationErrorDefaultImplementation(Exception exception, Ht partial void OnDeserializationError(ref bool suppressDefaultLog, Exception exception, HttpStatusCode httpStatusCode); } + + partial void FormatUploadFiles(List files); + + /// + /// Validates the request parameters + /// + /// + /// + private void ValidateUploadFiles(List files) + { + if (files == null) + throw new ArgumentNullException(nameof(files)); + } + + /// + /// Processes the server response + /// + /// + /// + private void AfterUploadFilesDefaultImplementation(IUploadFilesApiResponse apiResponseLocalVar, List files) + { + bool suppressDefaultLog = false; + AfterUploadFiles(ref suppressDefaultLog, apiResponseLocalVar, files); + if (!suppressDefaultLog) + Logger.LogInformation("{0,-9} | {1} | {3}", (apiResponseLocalVar.DownloadedAt - apiResponseLocalVar.RequestedAt).TotalSeconds, apiResponseLocalVar.StatusCode, apiResponseLocalVar.Path); + } + + /// + /// Processes the server response + /// + /// + /// + /// + partial void AfterUploadFiles(ref bool suppressDefaultLog, IUploadFilesApiResponse apiResponseLocalVar, List files); + + /// + /// Logs exceptions that occur while retrieving the server response + /// + /// + /// + /// + /// + private void OnErrorUploadFilesDefaultImplementation(Exception exceptionLocalVar, string pathFormatLocalVar, string pathLocalVar, List files) + { + bool suppressDefaultLogLocalVar = false; + OnErrorUploadFiles(ref suppressDefaultLogLocalVar, exceptionLocalVar, pathFormatLocalVar, pathLocalVar, files); + if (!suppressDefaultLogLocalVar) + Logger.LogError(exceptionLocalVar, "An error occurred while sending the request to the server."); + } + + /// + /// A partial method that gives developers a way to provide customized exception handling + /// + /// + /// + /// + /// + /// + partial void OnErrorUploadFiles(ref bool suppressDefaultLogLocalVar, Exception exceptionLocalVar, string pathFormatLocalVar, string pathLocalVar, List files); + + /// + /// Upload multiple files + /// + /// + /// Cancellation Token to cancel the request. + /// <> + public async Task UploadFilesOrDefaultAsync(List files, System.Threading.CancellationToken cancellationToken = default) + { + try + { + return await UploadFilesAsync(files, cancellationToken).ConfigureAwait(false); + } + catch (Exception) + { + return null; + } + } + + /// + /// Upload multiple files + /// + /// Thrown when fails to make API call + /// + /// Cancellation Token to cancel the request. + /// <> + public async Task UploadFilesAsync(List files, System.Threading.CancellationToken cancellationToken = default) + { + UriBuilder uriBuilderLocalVar = new UriBuilder(); + + try + { + ValidateUploadFiles(files); + + FormatUploadFiles(files); + + using (HttpRequestMessage httpRequestMessageLocalVar = new HttpRequestMessage()) + { + uriBuilderLocalVar.Host = HttpClient.BaseAddress!.Host; + uriBuilderLocalVar.Port = HttpClient.BaseAddress.Port; + uriBuilderLocalVar.Scheme = HttpClient.BaseAddress.Scheme; + uriBuilderLocalVar.Path = HttpClient.BaseAddress.AbsolutePath == "/" + ? "/upload" + : string.Concat(HttpClient.BaseAddress.AbsolutePath, "/upload"); + + MultipartContent multipartContentLocalVar = new MultipartContent(); + + httpRequestMessageLocalVar.Content = multipartContentLocalVar; + + List> formParameterLocalVars = new List>(); + + multipartContentLocalVar.Add(new FormUrlEncodedContent(formParameterLocalVars)); + + foreach (global::System.IO.Stream streamLocalVar in files) + { + 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); + } + + httpRequestMessageLocalVar.RequestUri = uriBuilderLocalVar.Uri; + + string[] contentTypes = new string[] { + "multipart/form-data" + }; + + string? contentTypeLocalVar = ClientUtils.SelectHeaderContentType(contentTypes); + + if (contentTypeLocalVar != null && httpRequestMessageLocalVar.Content != null) + httpRequestMessageLocalVar.Content.Headers.ContentType = new MediaTypeHeaderValue(contentTypeLocalVar); + + string[] acceptLocalVars = new string[] { + "application/json" + }; + + string? acceptLocalVar = ClientUtils.SelectHeaderAccept(acceptLocalVars); + + if (acceptLocalVar != null) + httpRequestMessageLocalVar.Headers.Accept.Add(new MediaTypeWithQualityHeaderValue(acceptLocalVar)); + + httpRequestMessageLocalVar.Method = HttpMethod.Post; + + DateTime requestedAtLocalVar = DateTime.UtcNow; + + using (HttpResponseMessage httpResponseMessageLocalVar = await HttpClient.SendAsync(httpRequestMessageLocalVar, cancellationToken).ConfigureAwait(false)) + { + string responseContentLocalVar = await httpResponseMessageLocalVar.Content.ReadAsStringAsync(cancellationToken).ConfigureAwait(false); + + ILogger apiResponseLoggerLocalVar = LoggerFactory.CreateLogger(); + + UploadFilesApiResponse apiResponseLocalVar = new(apiResponseLoggerLocalVar, httpRequestMessageLocalVar, httpResponseMessageLocalVar, responseContentLocalVar, "/upload", requestedAtLocalVar, _jsonSerializerOptions); + + AfterUploadFilesDefaultImplementation(apiResponseLocalVar, files); + + Events.ExecuteOnUploadFiles(apiResponseLocalVar); + + return apiResponseLocalVar; + } + } + } + catch(Exception e) + { + OnErrorUploadFilesDefaultImplementation(e, "/upload", uriBuilderLocalVar.Path, files); + Events.ExecuteOnErrorUploadFiles(e); + throw; + } + } + + /// + /// The + /// + public partial class UploadFilesApiResponse : Org.OpenAPITools.Client.ApiResponse, IUploadFilesApiResponse + { + /// + /// The logger + /// + public ILogger Logger { get; } + + /// + /// The + /// + /// + /// + /// + /// + /// + /// + /// + public UploadFilesApiResponse(ILogger logger, System.Net.Http.HttpRequestMessage httpRequestMessage, System.Net.Http.HttpResponseMessage httpResponseMessage, string rawContent, string path, DateTime requestedAt, System.Text.Json.JsonSerializerOptions jsonSerializerOptions) : base(httpRequestMessage, httpResponseMessage, rawContent, path, requestedAt, jsonSerializerOptions) + { + Logger = logger; + OnCreated(httpRequestMessage, httpResponseMessage); + } + + partial void OnCreated(global::System.Net.Http.HttpRequestMessage httpRequestMessage, System.Net.Http.HttpResponseMessage httpResponseMessage); + + /// + /// Returns true if the response is 200 Ok + /// + /// + public bool IsOk => 200 == (int)StatusCode; + + /// + /// Deserializes the response if the response is 200 Ok + /// + /// + public Org.OpenAPITools.Model.UploadFiles200Response? Ok() + { + // This logic may be modified with the AsModel.mustache template + return IsOk + ? System.Text.Json.JsonSerializer.Deserialize(RawContent, _jsonSerializerOptions) + : null; + } + + /// + /// Returns true if the response is 200 Ok and the deserialized response is not null + /// + /// + /// + public bool TryOk([NotNullWhen(true)]out Org.OpenAPITools.Model.UploadFiles200Response? result) + { + result = null; + + try + { + result = Ok(); + } catch (Exception e) + { + OnDeserializationErrorDefaultImplementation(e, (HttpStatusCode)200); + } + + return result != null; + } + + private void OnDeserializationErrorDefaultImplementation(Exception exception, HttpStatusCode httpStatusCode) + { + bool suppressDefaultLog = false; + OnDeserializationError(ref suppressDefaultLog, exception, httpStatusCode); + if (!suppressDefaultLog) + Logger.LogError(exception, "An error occurred while deserializing the {code} response.", httpStatusCode); + } + + partial void OnDeserializationError(ref bool suppressDefaultLog, Exception exception, HttpStatusCode httpStatusCode); + } } } diff --git a/samples/client/petstore/csharp/generichost/net9/NullReferenceTypes/src/Org.OpenAPITools/Api/FakeApi.cs b/samples/client/petstore/csharp/generichost/net9/NullReferenceTypes/src/Org.OpenAPITools/Api/FakeApi.cs index a8cd8a748f54..5706daa419cb 100644 --- a/samples/client/petstore/csharp/generichost/net9/NullReferenceTypes/src/Org.OpenAPITools/Api/FakeApi.cs +++ b/samples/client/petstore/csharp/generichost/net9/NullReferenceTypes/src/Org.OpenAPITools/Api/FakeApi.cs @@ -4035,7 +4035,6 @@ public async Task TestEndpointParametersAsyn if (binary.IsSet) multipartContentLocalVar.Add(new StreamContent(binary.Value)); - if (callback.IsSet) formParameterLocalVars.Add(new KeyValuePair("callback", ClientUtils.ParameterToString(callback.Value))); @@ -4357,7 +4356,9 @@ public async Task TestEnumParametersAsync(Option List> formParameterLocalVars = new List>(); - multipartContentLocalVar.Add(new FormUrlEncodedContent(formParameterLocalVars)); if (enumFormString.IsSet) + multipartContentLocalVar.Add(new FormUrlEncodedContent(formParameterLocalVars)); + + if (enumFormString.IsSet) formParameterLocalVars.Add(new KeyValuePair("enum_form_string", ClientUtils.ParameterToString(enumFormString.Value))); if (enumFormStringArray.IsSet) diff --git a/samples/client/petstore/csharp/generichost/net9/NullReferenceTypes/src/Org.OpenAPITools/Api/PetApi.cs b/samples/client/petstore/csharp/generichost/net9/NullReferenceTypes/src/Org.OpenAPITools/Api/PetApi.cs index 37841e79d60b..bfdcce3fe2e7 100644 --- a/samples/client/petstore/csharp/generichost/net9/NullReferenceTypes/src/Org.OpenAPITools/Api/PetApi.cs +++ b/samples/client/petstore/csharp/generichost/net9/NullReferenceTypes/src/Org.OpenAPITools/Api/PetApi.cs @@ -2204,7 +2204,9 @@ public async Task UpdatePetWithFormAsync(long pet List> formParameterLocalVars = new List>(); - multipartContentLocalVar.Add(new FormUrlEncodedContent(formParameterLocalVars)); if (name.IsSet) + multipartContentLocalVar.Add(new FormUrlEncodedContent(formParameterLocalVars)); + + if (name.IsSet) formParameterLocalVars.Add(new KeyValuePair("name", ClientUtils.ParameterToString(name.Value))); if (status.IsSet) @@ -2431,12 +2433,13 @@ public async Task UploadFileAsync(long petId, Option> formParameterLocalVars = new List>(); - multipartContentLocalVar.Add(new FormUrlEncodedContent(formParameterLocalVars)); if (additionalMetadata.IsSet) + multipartContentLocalVar.Add(new FormUrlEncodedContent(formParameterLocalVars)); + + if (additionalMetadata.IsSet) formParameterLocalVars.Add(new KeyValuePair("additionalMetadata", ClientUtils.ParameterToString(additionalMetadata.Value))); if (file.IsSet) multipartContentLocalVar.Add(new StreamContent(file.Value)); - List tokenBaseLocalVars = new List(); httpRequestMessageLocalVar.RequestUri = uriBuilderLocalVar.Uri; @@ -2699,7 +2702,9 @@ public async Task UploadFileWithRequired List> formParameterLocalVars = new List>(); - multipartContentLocalVar.Add(new FormUrlEncodedContent(formParameterLocalVars)); multipartContentLocalVar.Add(new StreamContent(requiredFile)); + multipartContentLocalVar.Add(new FormUrlEncodedContent(formParameterLocalVars)); + + multipartContentLocalVar.Add(new StreamContent(requiredFile)); if (additionalMetadata.IsSet) formParameterLocalVars.Add(new KeyValuePair("additionalMetadata", ClientUtils.ParameterToString(additionalMetadata.Value))); diff --git a/samples/client/petstore/csharp/generichost/net9/NullReferenceTypes/src/Org.OpenAPITools/Client/HostConfiguration.cs b/samples/client/petstore/csharp/generichost/net9/NullReferenceTypes/src/Org.OpenAPITools/Client/HostConfiguration.cs index 7828441b95e5..720fec5ca1a1 100644 --- a/samples/client/petstore/csharp/generichost/net9/NullReferenceTypes/src/Org.OpenAPITools/Client/HostConfiguration.cs +++ b/samples/client/petstore/csharp/generichost/net9/NullReferenceTypes/src/Org.OpenAPITools/Client/HostConfiguration.cs @@ -148,6 +148,7 @@ public HostConfiguration(IServiceCollection services) _jsonOptions.Converters.Add(new TestResultCodeNullableJsonConverter()); _jsonOptions.Converters.Add(new TriangleJsonConverter()); _jsonOptions.Converters.Add(new TriangleInterfaceJsonConverter()); + _jsonOptions.Converters.Add(new UploadFiles200ResponseJsonConverter()); _jsonOptions.Converters.Add(new UserJsonConverter()); _jsonOptions.Converters.Add(new WhaleJsonConverter()); _jsonOptions.Converters.Add(new ZebraJsonConverter()); diff --git a/samples/client/petstore/csharp/generichost/net9/NullReferenceTypes/src/Org.OpenAPITools/Model/UploadFiles200Response.cs b/samples/client/petstore/csharp/generichost/net9/NullReferenceTypes/src/Org.OpenAPITools/Model/UploadFiles200Response.cs new file mode 100644 index 000000000000..5a98cea99201 --- /dev/null +++ b/samples/client/petstore/csharp/generichost/net9/NullReferenceTypes/src/Org.OpenAPITools/Model/UploadFiles200Response.cs @@ -0,0 +1,202 @@ +// +/* + * OpenAPI Petstore + * + * This spec is mainly for testing Petstore server and contains fake endpoints, models. Please do not use this for any other purpose. Special characters: \" \\ + * + * The version of the OpenAPI document: 1.0.0 + * Generated by: https://github.com/openapitools/openapi-generator.git + */ + +#nullable enable + +using System; +using System.Collections; +using System.Collections.Generic; +using System.Collections.ObjectModel; +using System.Linq; +using System.IO; +using System.Text; +using System.Text.RegularExpressions; +using System.Text.Json; +using System.Text.Json.Serialization; +using System.ComponentModel.DataAnnotations; +using OpenAPIClientUtils = Org.OpenAPITools.Client.ClientUtils; +using Org.OpenAPITools.Client; + +namespace Org.OpenAPITools.Model +{ + /// + /// UploadFiles200Response + /// + public partial class UploadFiles200Response : IValidatableObject + { + /// + /// Initializes a new instance of the class. + /// + /// fileCount + /// message + [JsonConstructor] + public UploadFiles200Response(Option fileCount = default, Option message = default) + { + FileCountOption = fileCount; + MessageOption = message; + OnCreated(); + } + + partial void OnCreated(); + + /// + /// Used to track the state of FileCount + /// + [JsonIgnore] + [global::System.ComponentModel.EditorBrowsable(global::System.ComponentModel.EditorBrowsableState.Never)] + public Option FileCountOption { get; private set; } + + /// + /// Gets or Sets FileCount + /// + [JsonPropertyName("fileCount")] + public int? FileCount { get { return this.FileCountOption; } set { this.FileCountOption = new(value); } } + + /// + /// Used to track the state of Message + /// + [JsonIgnore] + [global::System.ComponentModel.EditorBrowsable(global::System.ComponentModel.EditorBrowsableState.Never)] + public Option MessageOption { get; private set; } + + /// + /// Gets or Sets Message + /// + [JsonPropertyName("message")] + public string? Message { get { return this.MessageOption; } set { this.MessageOption = new(value); } } + + /// + /// Gets or Sets additional properties + /// + [JsonExtensionData] + public Dictionary AdditionalProperties { get; } = new Dictionary(); + + /// + /// Returns the string presentation of the object + /// + /// String presentation of the object + public override string ToString() + { + StringBuilder sb = new StringBuilder(); + sb.Append("class UploadFiles200Response {\n"); + sb.Append(" FileCount: ").Append(FileCount).Append("\n"); + sb.Append(" Message: ").Append(Message).Append("\n"); + sb.Append(" AdditionalProperties: ").Append(AdditionalProperties).Append("\n"); + sb.Append("}\n"); + return sb.ToString(); + } + + /// + /// To validate all properties of the instance + /// + /// Validation context + /// Validation Result + IEnumerable IValidatableObject.Validate(ValidationContext validationContext) + { + yield break; + } + } + + /// + /// A Json converter for type + /// + public class UploadFiles200ResponseJsonConverter : JsonConverter + { + /// + /// Deserializes json to + /// + /// + /// + /// + /// + /// + public override UploadFiles200Response Read(ref Utf8JsonReader utf8JsonReader, Type typeToConvert, JsonSerializerOptions jsonSerializerOptions) + { + int currentDepth = utf8JsonReader.CurrentDepth; + + if (utf8JsonReader.TokenType != JsonTokenType.StartObject && utf8JsonReader.TokenType != JsonTokenType.StartArray) + throw new JsonException(); + + JsonTokenType startingTokenType = utf8JsonReader.TokenType; + + Option fileCount = default; + Option message = default; + + while (utf8JsonReader.Read()) + { + if (startingTokenType == JsonTokenType.StartObject && utf8JsonReader.TokenType == JsonTokenType.EndObject && currentDepth == utf8JsonReader.CurrentDepth) + break; + + if (startingTokenType == JsonTokenType.StartArray && utf8JsonReader.TokenType == JsonTokenType.EndArray && currentDepth == utf8JsonReader.CurrentDepth) + break; + + if (utf8JsonReader.TokenType == JsonTokenType.PropertyName && currentDepth == utf8JsonReader.CurrentDepth - 1) + { + string? localVarJsonPropertyName = utf8JsonReader.GetString(); + utf8JsonReader.Read(); + + switch (localVarJsonPropertyName) + { + case "fileCount": + fileCount = new Option(utf8JsonReader.TokenType == JsonTokenType.Null ? (int?)null : utf8JsonReader.GetInt32()); + break; + case "message": + message = new Option(utf8JsonReader.GetString()!); + break; + default: + break; + } + } + } + + if (fileCount.IsSet && fileCount.Value == null) + throw new ArgumentNullException(nameof(fileCount), "Property is not nullable for class UploadFiles200Response."); + + if (message.IsSet && message.Value == null) + throw new ArgumentNullException(nameof(message), "Property is not nullable for class UploadFiles200Response."); + + return new UploadFiles200Response(fileCount, message); + } + + /// + /// Serializes a + /// + /// + /// + /// + /// + public override void Write(Utf8JsonWriter writer, UploadFiles200Response uploadFiles200Response, JsonSerializerOptions jsonSerializerOptions) + { + writer.WriteStartObject(); + + WriteProperties(writer, uploadFiles200Response, jsonSerializerOptions); + writer.WriteEndObject(); + } + + /// + /// Serializes the properties of + /// + /// + /// + /// + /// + public void WriteProperties(Utf8JsonWriter writer, UploadFiles200Response uploadFiles200Response, JsonSerializerOptions jsonSerializerOptions) + { + if (uploadFiles200Response.MessageOption.IsSet && uploadFiles200Response.Message == null) + throw new ArgumentNullException(nameof(uploadFiles200Response.Message), "Property is required for class UploadFiles200Response."); + + if (uploadFiles200Response.FileCountOption.IsSet) + writer.WriteNumber("fileCount", uploadFiles200Response.FileCountOption.Value!.Value); + + if (uploadFiles200Response.MessageOption.IsSet) + writer.WriteString("message", uploadFiles200Response.Message); + } + } +} diff --git a/samples/client/petstore/csharp/generichost/net9/NullReferenceTypes/src/Org.OpenAPITools/README.md b/samples/client/petstore/csharp/generichost/net9/NullReferenceTypes/src/Org.OpenAPITools/README.md index 6b370c7bd33d..62be25ea883f 100644 --- a/samples/client/petstore/csharp/generichost/net9/NullReferenceTypes/src/Org.OpenAPITools/README.md +++ b/samples/client/petstore/csharp/generichost/net9/NullReferenceTypes/src/Org.OpenAPITools/README.md @@ -115,5 +115,5 @@ namespace YourProject This C# SDK is automatically generated by the [OpenAPI Generator](https://openapi-generator.tech) project. - SDK version: 1.0.0 -- Generator version: 7.14.0-SNAPSHOT +- Generator version: 7.14.0 - Build package: org.openapitools.codegen.languages.CSharpClientCodegen diff --git a/samples/client/petstore/csharp/generichost/net9/OneOf/.openapi-generator/VERSION b/samples/client/petstore/csharp/generichost/net9/OneOf/.openapi-generator/VERSION index 4c631cf217a2..e465da43155f 100644 --- a/samples/client/petstore/csharp/generichost/net9/OneOf/.openapi-generator/VERSION +++ b/samples/client/petstore/csharp/generichost/net9/OneOf/.openapi-generator/VERSION @@ -1 +1 @@ -7.14.0-SNAPSHOT +7.14.0 diff --git a/samples/client/petstore/csharp/generichost/net9/OneOf/src/Org.OpenAPITools/README.md b/samples/client/petstore/csharp/generichost/net9/OneOf/src/Org.OpenAPITools/README.md index f63af5fa9808..ae705734bcea 100644 --- a/samples/client/petstore/csharp/generichost/net9/OneOf/src/Org.OpenAPITools/README.md +++ b/samples/client/petstore/csharp/generichost/net9/OneOf/src/Org.OpenAPITools/README.md @@ -107,5 +107,5 @@ namespace YourProject This C# SDK is automatically generated by the [OpenAPI Generator](https://openapi-generator.tech) project. - SDK version: 1.0.0 -- Generator version: 7.14.0-SNAPSHOT +- Generator version: 7.14.0 - Build package: org.openapitools.codegen.languages.CSharpClientCodegen diff --git a/samples/client/petstore/csharp/generichost/net9/Petstore/.openapi-generator/FILES b/samples/client/petstore/csharp/generichost/net9/Petstore/.openapi-generator/FILES index ab28c754b4b1..b1a86728dc6c 100644 --- a/samples/client/petstore/csharp/generichost/net9/Petstore/.openapi-generator/FILES +++ b/samples/client/petstore/csharp/generichost/net9/Petstore/.openapi-generator/FILES @@ -108,6 +108,7 @@ docs/models/TestResult.md docs/models/TestResultCode.md docs/models/Triangle.md docs/models/TriangleInterface.md +docs/models/UploadFiles200Response.md docs/models/User.md docs/models/Whale.md docs/models/Zebra.md @@ -116,6 +117,7 @@ docs/models/ZeroBasedEnumClass.md docs/scripts/git_push.ps1 docs/scripts/git_push.sh src/Org.OpenAPITools.Test/Api/DependencyInjectionTests.cs +src/Org.OpenAPITools.Test/Model/UploadFiles200ResponseTests.cs src/Org.OpenAPITools.Test/Org.OpenAPITools.Test.csproj src/Org.OpenAPITools.Test/README.md src/Org.OpenAPITools/Api/AnotherFakeApi.cs @@ -251,6 +253,7 @@ src/Org.OpenAPITools/Model/TestResult.cs src/Org.OpenAPITools/Model/TestResultCode.cs src/Org.OpenAPITools/Model/Triangle.cs src/Org.OpenAPITools/Model/TriangleInterface.cs +src/Org.OpenAPITools/Model/UploadFiles200Response.cs src/Org.OpenAPITools/Model/User.cs src/Org.OpenAPITools/Model/Whale.cs src/Org.OpenAPITools/Model/Zebra.cs diff --git a/samples/client/petstore/csharp/generichost/net9/Petstore/.openapi-generator/VERSION b/samples/client/petstore/csharp/generichost/net9/Petstore/.openapi-generator/VERSION index 4c631cf217a2..e465da43155f 100644 --- a/samples/client/petstore/csharp/generichost/net9/Petstore/.openapi-generator/VERSION +++ b/samples/client/petstore/csharp/generichost/net9/Petstore/.openapi-generator/VERSION @@ -1 +1 @@ -7.14.0-SNAPSHOT +7.14.0 diff --git a/samples/client/petstore/csharp/generichost/net9/Petstore/api/openapi.yaml b/samples/client/petstore/csharp/generichost/net9/Petstore/api/openapi.yaml index d86a1d2f6d87..276850a46bc1 100644 --- a/samples/client/petstore/csharp/generichost/net9/Petstore/api/openapi.yaml +++ b/samples/client/petstore/csharp/generichost/net9/Petstore/api/openapi.yaml @@ -41,6 +41,23 @@ tags: - description: Operations about user name: user paths: + /upload: + post: + operationId: uploadFiles + requestBody: + content: + multipart/form-data: + schema: + $ref: "#/components/schemas/uploadFiles_request" + required: true + responses: + "200": + content: + application/json: + schema: + $ref: "#/components/schemas/uploadFiles_200_response" + description: Files uploaded successfully + summary: Upload multiple files /roles/report: get: responses: @@ -2865,6 +2882,26 @@ components: - APPROVED - MANUAL_APPROVAL_REQUIRED type: string + uploadFiles_request: + properties: + files: + items: + format: binary + type: string + type: array + required: + - files + type: object + uploadFiles_200_response: + example: + message: message + fileCount: 0 + properties: + message: + type: string + fileCount: + type: integer + type: object _foo_get_default_response: example: string: diff --git a/samples/client/petstore/csharp/generichost/net9/Petstore/docs/apis/DefaultApi.md b/samples/client/petstore/csharp/generichost/net9/Petstore/docs/apis/DefaultApi.md index e97541b8b6a5..0fa36d06dcaf 100644 --- a/samples/client/petstore/csharp/generichost/net9/Petstore/docs/apis/DefaultApi.md +++ b/samples/client/petstore/csharp/generichost/net9/Petstore/docs/apis/DefaultApi.md @@ -9,6 +9,7 @@ All URIs are relative to *http://petstore.swagger.io:80/v2* | [**Hello**](DefaultApi.md#hello) | **GET** /hello | Hello | | [**RolesReportGet**](DefaultApi.md#rolesreportget) | **GET** /roles/report | | | [**Test**](DefaultApi.md#test) | **GET** /test | Retrieve an existing Notificationtest's Elements | +| [**UploadFiles**](DefaultApi.md#uploadfiles) | **POST** /upload | Upload multiple files | # **FooGet** @@ -166,3 +167,37 @@ No authorization required [[Back to top]](#) [[Back to API list]](../../README.md#documentation-for-api-endpoints) [[Back to Model list]](../../README.md#documentation-for-models) [[Back to README]](../../README.md) + +# **UploadFiles** +> UploadFiles200Response UploadFiles (List files) + +Upload multiple files + + +### Parameters + +| Name | Type | Description | Notes | +|------|------|-------------|-------| +| **files** | **List<System.IO.Stream>** | | | + +### Return type + +[**UploadFiles200Response**](UploadFiles200Response.md) + +### Authorization + +No authorization required + +### HTTP request headers + + - **Content-Type**: multipart/form-data + - **Accept**: application/json + + +### HTTP response details +| Status code | Description | Response headers | +|-------------|-------------|------------------| +| **200** | Files uploaded successfully | - | + +[[Back to top]](#) [[Back to API list]](../../README.md#documentation-for-api-endpoints) [[Back to Model list]](../../README.md#documentation-for-models) [[Back to README]](../../README.md) + diff --git a/samples/client/petstore/csharp/generichost/net9/Petstore/docs/models/UploadFiles200Response.md b/samples/client/petstore/csharp/generichost/net9/Petstore/docs/models/UploadFiles200Response.md new file mode 100644 index 000000000000..8e32fc151b34 --- /dev/null +++ b/samples/client/petstore/csharp/generichost/net9/Petstore/docs/models/UploadFiles200Response.md @@ -0,0 +1,11 @@ +# Org.OpenAPITools.Model.UploadFiles200Response + +## Properties + +Name | Type | Description | Notes +------------ | ------------- | ------------- | ------------- +**FileCount** | **int** | | [optional] +**Message** | **string** | | [optional] + +[[Back to Model list]](../../README.md#documentation-for-models) [[Back to API list]](../../README.md#documentation-for-api-endpoints) [[Back to README]](../../README.md) + diff --git a/samples/client/petstore/csharp/generichost/net9/Petstore/src/Org.OpenAPITools.Test/Model/UploadFiles200ResponseTests.cs b/samples/client/petstore/csharp/generichost/net9/Petstore/src/Org.OpenAPITools.Test/Model/UploadFiles200ResponseTests.cs new file mode 100644 index 000000000000..e6003ac29cfe --- /dev/null +++ b/samples/client/petstore/csharp/generichost/net9/Petstore/src/Org.OpenAPITools.Test/Model/UploadFiles200ResponseTests.cs @@ -0,0 +1,74 @@ +/* + * OpenAPI Petstore + * + * This spec is mainly for testing Petstore server and contains fake endpoints, models. Please do not use this for any other purpose. Special characters: \" \\ + * + * The version of the OpenAPI document: 1.0.0 + * Generated by: https://github.com/openapitools/openapi-generator.git + */ + + +using Xunit; + +using System; +using System.Linq; +using System.IO; +using System.Collections.Generic; +using Org.OpenAPITools.Model; +using Org.OpenAPITools.Client; +using System.Reflection; + +namespace Org.OpenAPITools.Test.Model +{ + /// + /// Class for testing UploadFiles200Response + /// + /// + /// This file is automatically generated by OpenAPI Generator (https://openapi-generator.tech). + /// Please update the test case below to test the model. + /// + public class UploadFiles200ResponseTests : IDisposable + { + // TODO uncomment below to declare an instance variable for UploadFiles200Response + //private UploadFiles200Response instance; + + public UploadFiles200ResponseTests() + { + // TODO uncomment below to create an instance of UploadFiles200Response + //instance = new UploadFiles200Response(); + } + + public void Dispose() + { + // Cleanup when everything is done. + } + + /// + /// Test an instance of UploadFiles200Response + /// + [Fact] + public void UploadFiles200ResponseInstanceTest() + { + // TODO uncomment below to test "IsType" UploadFiles200Response + //Assert.IsType(instance); + } + + /// + /// Test the property 'FileCount' + /// + [Fact] + public void FileCountTest() + { + // TODO unit test for the property 'FileCount' + } + + /// + /// Test the property 'Message' + /// + [Fact] + public void MessageTest() + { + // TODO unit test for the property 'Message' + } + } +} diff --git a/samples/client/petstore/csharp/generichost/net9/Petstore/src/Org.OpenAPITools/Api/DefaultApi.cs b/samples/client/petstore/csharp/generichost/net9/Petstore/src/Org.OpenAPITools/Api/DefaultApi.cs index b26e51c70f3b..b3303666acac 100644 --- a/samples/client/petstore/csharp/generichost/net9/Petstore/src/Org.OpenAPITools/Api/DefaultApi.cs +++ b/samples/client/petstore/csharp/generichost/net9/Petstore/src/Org.OpenAPITools/Api/DefaultApi.cs @@ -139,6 +139,29 @@ public interface IDefaultApi : IApi /// Cancellation Token to cancel the request. /// <> Task TestOrDefaultAsync(System.Threading.CancellationToken cancellationToken = default); + + /// + /// Upload multiple files + /// + /// + /// + /// + /// Thrown when fails to make API call + /// + /// Cancellation Token to cancel the request. + /// <> + Task UploadFilesAsync(List files, System.Threading.CancellationToken cancellationToken = default); + + /// + /// Upload multiple files + /// + /// + /// + /// + /// + /// Cancellation Token to cancel the request. + /// <> + Task UploadFilesOrDefaultAsync(List files, System.Threading.CancellationToken cancellationToken = default); } /// @@ -201,6 +224,18 @@ public interface ITestApiResponse : Org.OpenAPITools.Client.IApiResponse, IOk + /// The + /// + public interface IUploadFilesApiResponse : Org.OpenAPITools.Client.IApiResponse, IOk + { + /// + /// Returns true if the response is 200 Ok + /// + /// + bool IsOk { get; } + } + /// /// Represents a collection of functions to interact with the API endpoints /// @@ -305,6 +340,26 @@ internal void ExecuteOnErrorTest(Exception exception) { OnErrorTest?.Invoke(this, new ExceptionEventArgs(exception)); } + + /// + /// The event raised after the server response + /// + public event EventHandler OnUploadFiles; + + /// + /// The event raised after an error querying the server + /// + public event EventHandler OnErrorUploadFiles; + + internal void ExecuteOnUploadFiles(DefaultApi.UploadFilesApiResponse apiResponse) + { + OnUploadFiles?.Invoke(this, new ApiResponseEventArgs(apiResponse)); + } + + internal void ExecuteOnErrorUploadFiles(Exception exception) + { + OnErrorUploadFiles?.Invoke(this, new ExceptionEventArgs(exception)); + } } /// @@ -1362,5 +1417,252 @@ private void OnDeserializationErrorDefaultImplementation(Exception exception, Ht partial void OnDeserializationError(ref bool suppressDefaultLog, Exception exception, HttpStatusCode httpStatusCode); } + + partial void FormatUploadFiles(List files); + + /// + /// Validates the request parameters + /// + /// + /// + private void ValidateUploadFiles(List files) + { + if (files == null) + throw new ArgumentNullException(nameof(files)); + } + + /// + /// Processes the server response + /// + /// + /// + private void AfterUploadFilesDefaultImplementation(IUploadFilesApiResponse apiResponseLocalVar, List files) + { + bool suppressDefaultLog = false; + AfterUploadFiles(ref suppressDefaultLog, apiResponseLocalVar, files); + if (!suppressDefaultLog) + Logger.LogInformation("{0,-9} | {1} | {3}", (apiResponseLocalVar.DownloadedAt - apiResponseLocalVar.RequestedAt).TotalSeconds, apiResponseLocalVar.StatusCode, apiResponseLocalVar.Path); + } + + /// + /// Processes the server response + /// + /// + /// + /// + partial void AfterUploadFiles(ref bool suppressDefaultLog, IUploadFilesApiResponse apiResponseLocalVar, List files); + + /// + /// Logs exceptions that occur while retrieving the server response + /// + /// + /// + /// + /// + private void OnErrorUploadFilesDefaultImplementation(Exception exceptionLocalVar, string pathFormatLocalVar, string pathLocalVar, List files) + { + bool suppressDefaultLogLocalVar = false; + OnErrorUploadFiles(ref suppressDefaultLogLocalVar, exceptionLocalVar, pathFormatLocalVar, pathLocalVar, files); + if (!suppressDefaultLogLocalVar) + Logger.LogError(exceptionLocalVar, "An error occurred while sending the request to the server."); + } + + /// + /// A partial method that gives developers a way to provide customized exception handling + /// + /// + /// + /// + /// + /// + partial void OnErrorUploadFiles(ref bool suppressDefaultLogLocalVar, Exception exceptionLocalVar, string pathFormatLocalVar, string pathLocalVar, List files); + + /// + /// Upload multiple files + /// + /// + /// Cancellation Token to cancel the request. + /// <> + public async Task UploadFilesOrDefaultAsync(List files, System.Threading.CancellationToken cancellationToken = default) + { + try + { + return await UploadFilesAsync(files, cancellationToken).ConfigureAwait(false); + } + catch (Exception) + { + return null; + } + } + + /// + /// Upload multiple files + /// + /// Thrown when fails to make API call + /// + /// Cancellation Token to cancel the request. + /// <> + public async Task UploadFilesAsync(List files, System.Threading.CancellationToken cancellationToken = default) + { + UriBuilder uriBuilderLocalVar = new UriBuilder(); + + try + { + ValidateUploadFiles(files); + + FormatUploadFiles(files); + + using (HttpRequestMessage httpRequestMessageLocalVar = new HttpRequestMessage()) + { + uriBuilderLocalVar.Host = HttpClient.BaseAddress.Host; + uriBuilderLocalVar.Port = HttpClient.BaseAddress.Port; + uriBuilderLocalVar.Scheme = HttpClient.BaseAddress.Scheme; + uriBuilderLocalVar.Path = HttpClient.BaseAddress.AbsolutePath == "/" + ? "/upload" + : string.Concat(HttpClient.BaseAddress.AbsolutePath, "/upload"); + + MultipartContent multipartContentLocalVar = new MultipartContent(); + + httpRequestMessageLocalVar.Content = multipartContentLocalVar; + + List> formParameterLocalVars = new List>(); + + multipartContentLocalVar.Add(new FormUrlEncodedContent(formParameterLocalVars)); + + foreach (global::System.IO.Stream streamLocalVar in files) + { + 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); + } + + httpRequestMessageLocalVar.RequestUri = uriBuilderLocalVar.Uri; + + string[] contentTypes = new string[] { + "multipart/form-data" + }; + + string contentTypeLocalVar = ClientUtils.SelectHeaderContentType(contentTypes); + + if (contentTypeLocalVar != null && httpRequestMessageLocalVar.Content != null) + httpRequestMessageLocalVar.Content.Headers.ContentType = new MediaTypeHeaderValue(contentTypeLocalVar); + + string[] acceptLocalVars = new string[] { + "application/json" + }; + + string acceptLocalVar = ClientUtils.SelectHeaderAccept(acceptLocalVars); + + if (acceptLocalVar != null) + httpRequestMessageLocalVar.Headers.Accept.Add(new MediaTypeWithQualityHeaderValue(acceptLocalVar)); + + httpRequestMessageLocalVar.Method = HttpMethod.Post; + + DateTime requestedAtLocalVar = DateTime.UtcNow; + + using (HttpResponseMessage httpResponseMessageLocalVar = await HttpClient.SendAsync(httpRequestMessageLocalVar, cancellationToken).ConfigureAwait(false)) + { + string responseContentLocalVar = await httpResponseMessageLocalVar.Content.ReadAsStringAsync(cancellationToken).ConfigureAwait(false); + + ILogger apiResponseLoggerLocalVar = LoggerFactory.CreateLogger(); + + UploadFilesApiResponse apiResponseLocalVar = new(apiResponseLoggerLocalVar, httpRequestMessageLocalVar, httpResponseMessageLocalVar, responseContentLocalVar, "/upload", requestedAtLocalVar, _jsonSerializerOptions); + + AfterUploadFilesDefaultImplementation(apiResponseLocalVar, files); + + Events.ExecuteOnUploadFiles(apiResponseLocalVar); + + return apiResponseLocalVar; + } + } + } + catch(Exception e) + { + OnErrorUploadFilesDefaultImplementation(e, "/upload", uriBuilderLocalVar.Path, files); + Events.ExecuteOnErrorUploadFiles(e); + throw; + } + } + + /// + /// The + /// + public partial class UploadFilesApiResponse : Org.OpenAPITools.Client.ApiResponse, IUploadFilesApiResponse + { + /// + /// The logger + /// + public ILogger Logger { get; } + + /// + /// The + /// + /// + /// + /// + /// + /// + /// + /// + public UploadFilesApiResponse(ILogger logger, System.Net.Http.HttpRequestMessage httpRequestMessage, System.Net.Http.HttpResponseMessage httpResponseMessage, string rawContent, string path, DateTime requestedAt, System.Text.Json.JsonSerializerOptions jsonSerializerOptions) : base(httpRequestMessage, httpResponseMessage, rawContent, path, requestedAt, jsonSerializerOptions) + { + Logger = logger; + OnCreated(httpRequestMessage, httpResponseMessage); + } + + partial void OnCreated(global::System.Net.Http.HttpRequestMessage httpRequestMessage, System.Net.Http.HttpResponseMessage httpResponseMessage); + + /// + /// Returns true if the response is 200 Ok + /// + /// + public bool IsOk => 200 == (int)StatusCode; + + /// + /// Deserializes the response if the response is 200 Ok + /// + /// + public Org.OpenAPITools.Model.UploadFiles200Response Ok() + { + // This logic may be modified with the AsModel.mustache template + return IsOk + ? System.Text.Json.JsonSerializer.Deserialize(RawContent, _jsonSerializerOptions) + : null; + } + + /// + /// Returns true if the response is 200 Ok and the deserialized response is not null + /// + /// + /// + public bool TryOk([NotNullWhen(true)]out Org.OpenAPITools.Model.UploadFiles200Response result) + { + result = null; + + try + { + result = Ok(); + } catch (Exception e) + { + OnDeserializationErrorDefaultImplementation(e, (HttpStatusCode)200); + } + + return result != null; + } + + private void OnDeserializationErrorDefaultImplementation(Exception exception, HttpStatusCode httpStatusCode) + { + bool suppressDefaultLog = false; + OnDeserializationError(ref suppressDefaultLog, exception, httpStatusCode); + if (!suppressDefaultLog) + Logger.LogError(exception, "An error occurred while deserializing the {code} response.", httpStatusCode); + } + + partial void OnDeserializationError(ref bool suppressDefaultLog, Exception exception, HttpStatusCode httpStatusCode); + } } } diff --git a/samples/client/petstore/csharp/generichost/net9/Petstore/src/Org.OpenAPITools/Api/FakeApi.cs b/samples/client/petstore/csharp/generichost/net9/Petstore/src/Org.OpenAPITools/Api/FakeApi.cs index 81aa4deb8b58..92a60ebd44b8 100644 --- a/samples/client/petstore/csharp/generichost/net9/Petstore/src/Org.OpenAPITools/Api/FakeApi.cs +++ b/samples/client/petstore/csharp/generichost/net9/Petstore/src/Org.OpenAPITools/Api/FakeApi.cs @@ -4033,7 +4033,6 @@ public async Task TestEndpointParametersAsyn if (binary.IsSet) multipartContentLocalVar.Add(new StreamContent(binary.Value)); - if (callback.IsSet) formParameterLocalVars.Add(new KeyValuePair("callback", ClientUtils.ParameterToString(callback.Value))); @@ -4355,7 +4354,9 @@ public async Task TestEnumParametersAsync(Option List> formParameterLocalVars = new List>(); - multipartContentLocalVar.Add(new FormUrlEncodedContent(formParameterLocalVars)); if (enumFormString.IsSet) + multipartContentLocalVar.Add(new FormUrlEncodedContent(formParameterLocalVars)); + + if (enumFormString.IsSet) formParameterLocalVars.Add(new KeyValuePair("enum_form_string", ClientUtils.ParameterToString(enumFormString.Value))); if (enumFormStringArray.IsSet) diff --git a/samples/client/petstore/csharp/generichost/net9/Petstore/src/Org.OpenAPITools/Api/PetApi.cs b/samples/client/petstore/csharp/generichost/net9/Petstore/src/Org.OpenAPITools/Api/PetApi.cs index 5b368a8be687..1c3a80231315 100644 --- a/samples/client/petstore/csharp/generichost/net9/Petstore/src/Org.OpenAPITools/Api/PetApi.cs +++ b/samples/client/petstore/csharp/generichost/net9/Petstore/src/Org.OpenAPITools/Api/PetApi.cs @@ -2202,7 +2202,9 @@ public async Task UpdatePetWithFormAsync(long pet List> formParameterLocalVars = new List>(); - multipartContentLocalVar.Add(new FormUrlEncodedContent(formParameterLocalVars)); if (name.IsSet) + multipartContentLocalVar.Add(new FormUrlEncodedContent(formParameterLocalVars)); + + if (name.IsSet) formParameterLocalVars.Add(new KeyValuePair("name", ClientUtils.ParameterToString(name.Value))); if (status.IsSet) @@ -2429,12 +2431,13 @@ public async Task UploadFileAsync(long petId, Option> formParameterLocalVars = new List>(); - multipartContentLocalVar.Add(new FormUrlEncodedContent(formParameterLocalVars)); if (additionalMetadata.IsSet) + multipartContentLocalVar.Add(new FormUrlEncodedContent(formParameterLocalVars)); + + if (additionalMetadata.IsSet) formParameterLocalVars.Add(new KeyValuePair("additionalMetadata", ClientUtils.ParameterToString(additionalMetadata.Value))); if (file.IsSet) multipartContentLocalVar.Add(new StreamContent(file.Value)); - List tokenBaseLocalVars = new List(); httpRequestMessageLocalVar.RequestUri = uriBuilderLocalVar.Uri; @@ -2697,7 +2700,9 @@ public async Task UploadFileWithRequired List> formParameterLocalVars = new List>(); - multipartContentLocalVar.Add(new FormUrlEncodedContent(formParameterLocalVars)); multipartContentLocalVar.Add(new StreamContent(requiredFile)); + multipartContentLocalVar.Add(new FormUrlEncodedContent(formParameterLocalVars)); + + multipartContentLocalVar.Add(new StreamContent(requiredFile)); if (additionalMetadata.IsSet) formParameterLocalVars.Add(new KeyValuePair("additionalMetadata", ClientUtils.ParameterToString(additionalMetadata.Value))); diff --git a/samples/client/petstore/csharp/generichost/net9/Petstore/src/Org.OpenAPITools/Client/HostConfiguration.cs b/samples/client/petstore/csharp/generichost/net9/Petstore/src/Org.OpenAPITools/Client/HostConfiguration.cs index f97fb3c5e7a2..3783fe7458ed 100644 --- a/samples/client/petstore/csharp/generichost/net9/Petstore/src/Org.OpenAPITools/Client/HostConfiguration.cs +++ b/samples/client/petstore/csharp/generichost/net9/Petstore/src/Org.OpenAPITools/Client/HostConfiguration.cs @@ -146,6 +146,7 @@ public HostConfiguration(IServiceCollection services) _jsonOptions.Converters.Add(new TestResultCodeNullableJsonConverter()); _jsonOptions.Converters.Add(new TriangleJsonConverter()); _jsonOptions.Converters.Add(new TriangleInterfaceJsonConverter()); + _jsonOptions.Converters.Add(new UploadFiles200ResponseJsonConverter()); _jsonOptions.Converters.Add(new UserJsonConverter()); _jsonOptions.Converters.Add(new WhaleJsonConverter()); _jsonOptions.Converters.Add(new ZebraJsonConverter()); diff --git a/samples/client/petstore/csharp/generichost/net9/Petstore/src/Org.OpenAPITools/Model/UploadFiles200Response.cs b/samples/client/petstore/csharp/generichost/net9/Petstore/src/Org.OpenAPITools/Model/UploadFiles200Response.cs new file mode 100644 index 000000000000..4dc38200f1ef --- /dev/null +++ b/samples/client/petstore/csharp/generichost/net9/Petstore/src/Org.OpenAPITools/Model/UploadFiles200Response.cs @@ -0,0 +1,200 @@ +// +/* + * OpenAPI Petstore + * + * This spec is mainly for testing Petstore server and contains fake endpoints, models. Please do not use this for any other purpose. Special characters: \" \\ + * + * The version of the OpenAPI document: 1.0.0 + * Generated by: https://github.com/openapitools/openapi-generator.git + */ + +using System; +using System.Collections; +using System.Collections.Generic; +using System.Collections.ObjectModel; +using System.Linq; +using System.IO; +using System.Text; +using System.Text.RegularExpressions; +using System.Text.Json; +using System.Text.Json.Serialization; +using System.ComponentModel.DataAnnotations; +using OpenAPIClientUtils = Org.OpenAPITools.Client.ClientUtils; +using Org.OpenAPITools.Client; + +namespace Org.OpenAPITools.Model +{ + /// + /// UploadFiles200Response + /// + public partial class UploadFiles200Response : IValidatableObject + { + /// + /// Initializes a new instance of the class. + /// + /// fileCount + /// message + [JsonConstructor] + public UploadFiles200Response(Option fileCount = default, Option message = default) + { + FileCountOption = fileCount; + MessageOption = message; + OnCreated(); + } + + partial void OnCreated(); + + /// + /// Used to track the state of FileCount + /// + [JsonIgnore] + [global::System.ComponentModel.EditorBrowsable(global::System.ComponentModel.EditorBrowsableState.Never)] + public Option FileCountOption { get; private set; } + + /// + /// Gets or Sets FileCount + /// + [JsonPropertyName("fileCount")] + public int? FileCount { get { return this.FileCountOption; } set { this.FileCountOption = new(value); } } + + /// + /// Used to track the state of Message + /// + [JsonIgnore] + [global::System.ComponentModel.EditorBrowsable(global::System.ComponentModel.EditorBrowsableState.Never)] + public Option MessageOption { get; private set; } + + /// + /// Gets or Sets Message + /// + [JsonPropertyName("message")] + public string Message { get { return this.MessageOption; } set { this.MessageOption = new(value); } } + + /// + /// Gets or Sets additional properties + /// + [JsonExtensionData] + public Dictionary AdditionalProperties { get; } = new Dictionary(); + + /// + /// Returns the string presentation of the object + /// + /// String presentation of the object + public override string ToString() + { + StringBuilder sb = new StringBuilder(); + sb.Append("class UploadFiles200Response {\n"); + sb.Append(" FileCount: ").Append(FileCount).Append("\n"); + sb.Append(" Message: ").Append(Message).Append("\n"); + sb.Append(" AdditionalProperties: ").Append(AdditionalProperties).Append("\n"); + sb.Append("}\n"); + return sb.ToString(); + } + + /// + /// To validate all properties of the instance + /// + /// Validation context + /// Validation Result + IEnumerable IValidatableObject.Validate(ValidationContext validationContext) + { + yield break; + } + } + + /// + /// A Json converter for type + /// + public class UploadFiles200ResponseJsonConverter : JsonConverter + { + /// + /// Deserializes json to + /// + /// + /// + /// + /// + /// + public override UploadFiles200Response Read(ref Utf8JsonReader utf8JsonReader, Type typeToConvert, JsonSerializerOptions jsonSerializerOptions) + { + int currentDepth = utf8JsonReader.CurrentDepth; + + if (utf8JsonReader.TokenType != JsonTokenType.StartObject && utf8JsonReader.TokenType != JsonTokenType.StartArray) + throw new JsonException(); + + JsonTokenType startingTokenType = utf8JsonReader.TokenType; + + Option fileCount = default; + Option message = default; + + while (utf8JsonReader.Read()) + { + if (startingTokenType == JsonTokenType.StartObject && utf8JsonReader.TokenType == JsonTokenType.EndObject && currentDepth == utf8JsonReader.CurrentDepth) + break; + + if (startingTokenType == JsonTokenType.StartArray && utf8JsonReader.TokenType == JsonTokenType.EndArray && currentDepth == utf8JsonReader.CurrentDepth) + break; + + if (utf8JsonReader.TokenType == JsonTokenType.PropertyName && currentDepth == utf8JsonReader.CurrentDepth - 1) + { + string localVarJsonPropertyName = utf8JsonReader.GetString(); + utf8JsonReader.Read(); + + switch (localVarJsonPropertyName) + { + case "fileCount": + fileCount = new Option(utf8JsonReader.TokenType == JsonTokenType.Null ? (int?)null : utf8JsonReader.GetInt32()); + break; + case "message": + message = new Option(utf8JsonReader.GetString()); + break; + default: + break; + } + } + } + + if (fileCount.IsSet && fileCount.Value == null) + throw new ArgumentNullException(nameof(fileCount), "Property is not nullable for class UploadFiles200Response."); + + if (message.IsSet && message.Value == null) + throw new ArgumentNullException(nameof(message), "Property is not nullable for class UploadFiles200Response."); + + return new UploadFiles200Response(fileCount, message); + } + + /// + /// Serializes a + /// + /// + /// + /// + /// + public override void Write(Utf8JsonWriter writer, UploadFiles200Response uploadFiles200Response, JsonSerializerOptions jsonSerializerOptions) + { + writer.WriteStartObject(); + + WriteProperties(writer, uploadFiles200Response, jsonSerializerOptions); + writer.WriteEndObject(); + } + + /// + /// Serializes the properties of + /// + /// + /// + /// + /// + public void WriteProperties(Utf8JsonWriter writer, UploadFiles200Response uploadFiles200Response, JsonSerializerOptions jsonSerializerOptions) + { + if (uploadFiles200Response.MessageOption.IsSet && uploadFiles200Response.Message == null) + throw new ArgumentNullException(nameof(uploadFiles200Response.Message), "Property is required for class UploadFiles200Response."); + + if (uploadFiles200Response.FileCountOption.IsSet) + writer.WriteNumber("fileCount", uploadFiles200Response.FileCountOption.Value.Value); + + if (uploadFiles200Response.MessageOption.IsSet) + writer.WriteString("message", uploadFiles200Response.Message); + } + } +} diff --git a/samples/client/petstore/csharp/generichost/net9/Petstore/src/Org.OpenAPITools/README.md b/samples/client/petstore/csharp/generichost/net9/Petstore/src/Org.OpenAPITools/README.md index 80f8c6bea340..c4d7b255ae76 100644 --- a/samples/client/petstore/csharp/generichost/net9/Petstore/src/Org.OpenAPITools/README.md +++ b/samples/client/petstore/csharp/generichost/net9/Petstore/src/Org.OpenAPITools/README.md @@ -115,5 +115,5 @@ namespace YourProject This C# SDK is automatically generated by the [OpenAPI Generator](https://openapi-generator.tech) project. - SDK version: 1.0.0 -- Generator version: 7.14.0-SNAPSHOT +- Generator version: 7.14.0 - Build package: org.openapitools.codegen.languages.CSharpClientCodegen diff --git a/samples/client/petstore/csharp/generichost/net9/SourceGeneration/.openapi-generator/FILES b/samples/client/petstore/csharp/generichost/net9/SourceGeneration/.openapi-generator/FILES index ab28c754b4b1..b1a86728dc6c 100644 --- a/samples/client/petstore/csharp/generichost/net9/SourceGeneration/.openapi-generator/FILES +++ b/samples/client/petstore/csharp/generichost/net9/SourceGeneration/.openapi-generator/FILES @@ -108,6 +108,7 @@ docs/models/TestResult.md docs/models/TestResultCode.md docs/models/Triangle.md docs/models/TriangleInterface.md +docs/models/UploadFiles200Response.md docs/models/User.md docs/models/Whale.md docs/models/Zebra.md @@ -116,6 +117,7 @@ docs/models/ZeroBasedEnumClass.md docs/scripts/git_push.ps1 docs/scripts/git_push.sh src/Org.OpenAPITools.Test/Api/DependencyInjectionTests.cs +src/Org.OpenAPITools.Test/Model/UploadFiles200ResponseTests.cs src/Org.OpenAPITools.Test/Org.OpenAPITools.Test.csproj src/Org.OpenAPITools.Test/README.md src/Org.OpenAPITools/Api/AnotherFakeApi.cs @@ -251,6 +253,7 @@ src/Org.OpenAPITools/Model/TestResult.cs src/Org.OpenAPITools/Model/TestResultCode.cs src/Org.OpenAPITools/Model/Triangle.cs src/Org.OpenAPITools/Model/TriangleInterface.cs +src/Org.OpenAPITools/Model/UploadFiles200Response.cs src/Org.OpenAPITools/Model/User.cs src/Org.OpenAPITools/Model/Whale.cs src/Org.OpenAPITools/Model/Zebra.cs diff --git a/samples/client/petstore/csharp/generichost/net9/SourceGeneration/.openapi-generator/VERSION b/samples/client/petstore/csharp/generichost/net9/SourceGeneration/.openapi-generator/VERSION index 4c631cf217a2..e465da43155f 100644 --- a/samples/client/petstore/csharp/generichost/net9/SourceGeneration/.openapi-generator/VERSION +++ b/samples/client/petstore/csharp/generichost/net9/SourceGeneration/.openapi-generator/VERSION @@ -1 +1 @@ -7.14.0-SNAPSHOT +7.14.0 diff --git a/samples/client/petstore/csharp/generichost/net9/SourceGeneration/api/openapi.yaml b/samples/client/petstore/csharp/generichost/net9/SourceGeneration/api/openapi.yaml index d86a1d2f6d87..276850a46bc1 100644 --- a/samples/client/petstore/csharp/generichost/net9/SourceGeneration/api/openapi.yaml +++ b/samples/client/petstore/csharp/generichost/net9/SourceGeneration/api/openapi.yaml @@ -41,6 +41,23 @@ tags: - description: Operations about user name: user paths: + /upload: + post: + operationId: uploadFiles + requestBody: + content: + multipart/form-data: + schema: + $ref: "#/components/schemas/uploadFiles_request" + required: true + responses: + "200": + content: + application/json: + schema: + $ref: "#/components/schemas/uploadFiles_200_response" + description: Files uploaded successfully + summary: Upload multiple files /roles/report: get: responses: @@ -2865,6 +2882,26 @@ components: - APPROVED - MANUAL_APPROVAL_REQUIRED type: string + uploadFiles_request: + properties: + files: + items: + format: binary + type: string + type: array + required: + - files + type: object + uploadFiles_200_response: + example: + message: message + fileCount: 0 + properties: + message: + type: string + fileCount: + type: integer + type: object _foo_get_default_response: example: string: diff --git a/samples/client/petstore/csharp/generichost/net9/SourceGeneration/docs/apis/DefaultApi.md b/samples/client/petstore/csharp/generichost/net9/SourceGeneration/docs/apis/DefaultApi.md index e97541b8b6a5..0fa36d06dcaf 100644 --- a/samples/client/petstore/csharp/generichost/net9/SourceGeneration/docs/apis/DefaultApi.md +++ b/samples/client/petstore/csharp/generichost/net9/SourceGeneration/docs/apis/DefaultApi.md @@ -9,6 +9,7 @@ All URIs are relative to *http://petstore.swagger.io:80/v2* | [**Hello**](DefaultApi.md#hello) | **GET** /hello | Hello | | [**RolesReportGet**](DefaultApi.md#rolesreportget) | **GET** /roles/report | | | [**Test**](DefaultApi.md#test) | **GET** /test | Retrieve an existing Notificationtest's Elements | +| [**UploadFiles**](DefaultApi.md#uploadfiles) | **POST** /upload | Upload multiple files | # **FooGet** @@ -166,3 +167,37 @@ No authorization required [[Back to top]](#) [[Back to API list]](../../README.md#documentation-for-api-endpoints) [[Back to Model list]](../../README.md#documentation-for-models) [[Back to README]](../../README.md) + +# **UploadFiles** +> UploadFiles200Response UploadFiles (List files) + +Upload multiple files + + +### Parameters + +| Name | Type | Description | Notes | +|------|------|-------------|-------| +| **files** | **List<System.IO.Stream>** | | | + +### Return type + +[**UploadFiles200Response**](UploadFiles200Response.md) + +### Authorization + +No authorization required + +### HTTP request headers + + - **Content-Type**: multipart/form-data + - **Accept**: application/json + + +### HTTP response details +| Status code | Description | Response headers | +|-------------|-------------|------------------| +| **200** | Files uploaded successfully | - | + +[[Back to top]](#) [[Back to API list]](../../README.md#documentation-for-api-endpoints) [[Back to Model list]](../../README.md#documentation-for-models) [[Back to README]](../../README.md) + diff --git a/samples/client/petstore/csharp/generichost/net9/SourceGeneration/docs/models/UploadFiles200Response.md b/samples/client/petstore/csharp/generichost/net9/SourceGeneration/docs/models/UploadFiles200Response.md new file mode 100644 index 000000000000..8e32fc151b34 --- /dev/null +++ b/samples/client/petstore/csharp/generichost/net9/SourceGeneration/docs/models/UploadFiles200Response.md @@ -0,0 +1,11 @@ +# Org.OpenAPITools.Model.UploadFiles200Response + +## Properties + +Name | Type | Description | Notes +------------ | ------------- | ------------- | ------------- +**FileCount** | **int** | | [optional] +**Message** | **string** | | [optional] + +[[Back to Model list]](../../README.md#documentation-for-models) [[Back to API list]](../../README.md#documentation-for-api-endpoints) [[Back to README]](../../README.md) + diff --git a/samples/client/petstore/csharp/generichost/net9/SourceGeneration/src/Org.OpenAPITools.Test/Model/UploadFiles200ResponseTests.cs b/samples/client/petstore/csharp/generichost/net9/SourceGeneration/src/Org.OpenAPITools.Test/Model/UploadFiles200ResponseTests.cs new file mode 100644 index 000000000000..e6003ac29cfe --- /dev/null +++ b/samples/client/petstore/csharp/generichost/net9/SourceGeneration/src/Org.OpenAPITools.Test/Model/UploadFiles200ResponseTests.cs @@ -0,0 +1,74 @@ +/* + * OpenAPI Petstore + * + * This spec is mainly for testing Petstore server and contains fake endpoints, models. Please do not use this for any other purpose. Special characters: \" \\ + * + * The version of the OpenAPI document: 1.0.0 + * Generated by: https://github.com/openapitools/openapi-generator.git + */ + + +using Xunit; + +using System; +using System.Linq; +using System.IO; +using System.Collections.Generic; +using Org.OpenAPITools.Model; +using Org.OpenAPITools.Client; +using System.Reflection; + +namespace Org.OpenAPITools.Test.Model +{ + /// + /// Class for testing UploadFiles200Response + /// + /// + /// This file is automatically generated by OpenAPI Generator (https://openapi-generator.tech). + /// Please update the test case below to test the model. + /// + public class UploadFiles200ResponseTests : IDisposable + { + // TODO uncomment below to declare an instance variable for UploadFiles200Response + //private UploadFiles200Response instance; + + public UploadFiles200ResponseTests() + { + // TODO uncomment below to create an instance of UploadFiles200Response + //instance = new UploadFiles200Response(); + } + + public void Dispose() + { + // Cleanup when everything is done. + } + + /// + /// Test an instance of UploadFiles200Response + /// + [Fact] + public void UploadFiles200ResponseInstanceTest() + { + // TODO uncomment below to test "IsType" UploadFiles200Response + //Assert.IsType(instance); + } + + /// + /// Test the property 'FileCount' + /// + [Fact] + public void FileCountTest() + { + // TODO unit test for the property 'FileCount' + } + + /// + /// Test the property 'Message' + /// + [Fact] + public void MessageTest() + { + // TODO unit test for the property 'Message' + } + } +} diff --git a/samples/client/petstore/csharp/generichost/net9/SourceGeneration/src/Org.OpenAPITools/Api/DefaultApi.cs b/samples/client/petstore/csharp/generichost/net9/SourceGeneration/src/Org.OpenAPITools/Api/DefaultApi.cs index 545c65127912..56f47ba8f94c 100644 --- a/samples/client/petstore/csharp/generichost/net9/SourceGeneration/src/Org.OpenAPITools/Api/DefaultApi.cs +++ b/samples/client/petstore/csharp/generichost/net9/SourceGeneration/src/Org.OpenAPITools/Api/DefaultApi.cs @@ -141,6 +141,29 @@ public interface IDefaultApi : IApi /// Cancellation Token to cancel the request. /// <?> Task TestOrDefaultAsync(System.Threading.CancellationToken cancellationToken = default); + + /// + /// Upload multiple files + /// + /// + /// + /// + /// Thrown when fails to make API call + /// + /// Cancellation Token to cancel the request. + /// <> + Task UploadFilesAsync(List files, System.Threading.CancellationToken cancellationToken = default); + + /// + /// Upload multiple files + /// + /// + /// + /// + /// + /// Cancellation Token to cancel the request. + /// <?> + Task UploadFilesOrDefaultAsync(List files, System.Threading.CancellationToken cancellationToken = default); } /// @@ -203,6 +226,18 @@ public interface ITestApiResponse : Org.OpenAPITools.Client.IApiResponse, IOk + /// The + /// + public interface IUploadFilesApiResponse : Org.OpenAPITools.Client.IApiResponse, IOk + { + /// + /// Returns true if the response is 200 Ok + /// + /// + bool IsOk { get; } + } + /// /// Represents a collection of functions to interact with the API endpoints /// @@ -307,6 +342,26 @@ internal void ExecuteOnErrorTest(Exception exception) { OnErrorTest?.Invoke(this, new ExceptionEventArgs(exception)); } + + /// + /// The event raised after the server response + /// + public event EventHandler? OnUploadFiles; + + /// + /// The event raised after an error querying the server + /// + public event EventHandler? OnErrorUploadFiles; + + internal void ExecuteOnUploadFiles(DefaultApi.UploadFilesApiResponse apiResponse) + { + OnUploadFiles?.Invoke(this, new ApiResponseEventArgs(apiResponse)); + } + + internal void ExecuteOnErrorUploadFiles(Exception exception) + { + OnErrorUploadFiles?.Invoke(this, new ExceptionEventArgs(exception)); + } } /// @@ -1364,5 +1419,252 @@ private void OnDeserializationErrorDefaultImplementation(Exception exception, Ht partial void OnDeserializationError(ref bool suppressDefaultLog, Exception exception, HttpStatusCode httpStatusCode); } + + partial void FormatUploadFiles(List files); + + /// + /// Validates the request parameters + /// + /// + /// + private void ValidateUploadFiles(List files) + { + if (files == null) + throw new ArgumentNullException(nameof(files)); + } + + /// + /// Processes the server response + /// + /// + /// + private void AfterUploadFilesDefaultImplementation(IUploadFilesApiResponse apiResponseLocalVar, List files) + { + bool suppressDefaultLog = false; + AfterUploadFiles(ref suppressDefaultLog, apiResponseLocalVar, files); + if (!suppressDefaultLog) + Logger.LogInformation("{0,-9} | {1} | {3}", (apiResponseLocalVar.DownloadedAt - apiResponseLocalVar.RequestedAt).TotalSeconds, apiResponseLocalVar.StatusCode, apiResponseLocalVar.Path); + } + + /// + /// Processes the server response + /// + /// + /// + /// + partial void AfterUploadFiles(ref bool suppressDefaultLog, IUploadFilesApiResponse apiResponseLocalVar, List files); + + /// + /// Logs exceptions that occur while retrieving the server response + /// + /// + /// + /// + /// + private void OnErrorUploadFilesDefaultImplementation(Exception exceptionLocalVar, string pathFormatLocalVar, string pathLocalVar, List files) + { + bool suppressDefaultLogLocalVar = false; + OnErrorUploadFiles(ref suppressDefaultLogLocalVar, exceptionLocalVar, pathFormatLocalVar, pathLocalVar, files); + if (!suppressDefaultLogLocalVar) + Logger.LogError(exceptionLocalVar, "An error occurred while sending the request to the server."); + } + + /// + /// A partial method that gives developers a way to provide customized exception handling + /// + /// + /// + /// + /// + /// + partial void OnErrorUploadFiles(ref bool suppressDefaultLogLocalVar, Exception exceptionLocalVar, string pathFormatLocalVar, string pathLocalVar, List files); + + /// + /// Upload multiple files + /// + /// + /// Cancellation Token to cancel the request. + /// <> + public async Task UploadFilesOrDefaultAsync(List files, System.Threading.CancellationToken cancellationToken = default) + { + try + { + return await UploadFilesAsync(files, cancellationToken).ConfigureAwait(false); + } + catch (Exception) + { + return null; + } + } + + /// + /// Upload multiple files + /// + /// Thrown when fails to make API call + /// + /// Cancellation Token to cancel the request. + /// <> + public async Task UploadFilesAsync(List files, System.Threading.CancellationToken cancellationToken = default) + { + UriBuilder uriBuilderLocalVar = new UriBuilder(); + + try + { + ValidateUploadFiles(files); + + FormatUploadFiles(files); + + using (HttpRequestMessage httpRequestMessageLocalVar = new HttpRequestMessage()) + { + uriBuilderLocalVar.Host = HttpClient.BaseAddress!.Host; + uriBuilderLocalVar.Port = HttpClient.BaseAddress.Port; + uriBuilderLocalVar.Scheme = HttpClient.BaseAddress.Scheme; + uriBuilderLocalVar.Path = HttpClient.BaseAddress.AbsolutePath == "/" + ? "/upload" + : string.Concat(HttpClient.BaseAddress.AbsolutePath, "/upload"); + + MultipartContent multipartContentLocalVar = new MultipartContent(); + + httpRequestMessageLocalVar.Content = multipartContentLocalVar; + + List> formParameterLocalVars = new List>(); + + multipartContentLocalVar.Add(new FormUrlEncodedContent(formParameterLocalVars)); + + foreach (global::System.IO.Stream streamLocalVar in files) + { + 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); + } + + httpRequestMessageLocalVar.RequestUri = uriBuilderLocalVar.Uri; + + string[] contentTypes = new string[] { + "multipart/form-data" + }; + + string? contentTypeLocalVar = ClientUtils.SelectHeaderContentType(contentTypes); + + if (contentTypeLocalVar != null && httpRequestMessageLocalVar.Content != null) + httpRequestMessageLocalVar.Content.Headers.ContentType = new MediaTypeHeaderValue(contentTypeLocalVar); + + string[] acceptLocalVars = new string[] { + "application/json" + }; + + string? acceptLocalVar = ClientUtils.SelectHeaderAccept(acceptLocalVars); + + if (acceptLocalVar != null) + httpRequestMessageLocalVar.Headers.Accept.Add(new MediaTypeWithQualityHeaderValue(acceptLocalVar)); + + httpRequestMessageLocalVar.Method = HttpMethod.Post; + + DateTime requestedAtLocalVar = DateTime.UtcNow; + + using (HttpResponseMessage httpResponseMessageLocalVar = await HttpClient.SendAsync(httpRequestMessageLocalVar, cancellationToken).ConfigureAwait(false)) + { + string responseContentLocalVar = await httpResponseMessageLocalVar.Content.ReadAsStringAsync(cancellationToken).ConfigureAwait(false); + + ILogger apiResponseLoggerLocalVar = LoggerFactory.CreateLogger(); + + UploadFilesApiResponse apiResponseLocalVar = new(apiResponseLoggerLocalVar, httpRequestMessageLocalVar, httpResponseMessageLocalVar, responseContentLocalVar, "/upload", requestedAtLocalVar, _jsonSerializerOptions); + + AfterUploadFilesDefaultImplementation(apiResponseLocalVar, files); + + Events.ExecuteOnUploadFiles(apiResponseLocalVar); + + return apiResponseLocalVar; + } + } + } + catch(Exception e) + { + OnErrorUploadFilesDefaultImplementation(e, "/upload", uriBuilderLocalVar.Path, files); + Events.ExecuteOnErrorUploadFiles(e); + throw; + } + } + + /// + /// The + /// + public partial class UploadFilesApiResponse : Org.OpenAPITools.Client.ApiResponse, IUploadFilesApiResponse + { + /// + /// The logger + /// + public ILogger Logger { get; } + + /// + /// The + /// + /// + /// + /// + /// + /// + /// + /// + public UploadFilesApiResponse(ILogger logger, System.Net.Http.HttpRequestMessage httpRequestMessage, System.Net.Http.HttpResponseMessage httpResponseMessage, string rawContent, string path, DateTime requestedAt, System.Text.Json.JsonSerializerOptions jsonSerializerOptions) : base(httpRequestMessage, httpResponseMessage, rawContent, path, requestedAt, jsonSerializerOptions) + { + Logger = logger; + OnCreated(httpRequestMessage, httpResponseMessage); + } + + partial void OnCreated(global::System.Net.Http.HttpRequestMessage httpRequestMessage, System.Net.Http.HttpResponseMessage httpResponseMessage); + + /// + /// Returns true if the response is 200 Ok + /// + /// + public bool IsOk => 200 == (int)StatusCode; + + /// + /// Deserializes the response if the response is 200 Ok + /// + /// + public Org.OpenAPITools.Model.UploadFiles200Response? Ok() + { + // This logic may be modified with the AsModel.mustache template + return IsOk + ? System.Text.Json.JsonSerializer.Deserialize(RawContent, _jsonSerializerOptions) + : null; + } + + /// + /// Returns true if the response is 200 Ok and the deserialized response is not null + /// + /// + /// + public bool TryOk([NotNullWhen(true)]out Org.OpenAPITools.Model.UploadFiles200Response? result) + { + result = null; + + try + { + result = Ok(); + } catch (Exception e) + { + OnDeserializationErrorDefaultImplementation(e, (HttpStatusCode)200); + } + + return result != null; + } + + private void OnDeserializationErrorDefaultImplementation(Exception exception, HttpStatusCode httpStatusCode) + { + bool suppressDefaultLog = false; + OnDeserializationError(ref suppressDefaultLog, exception, httpStatusCode); + if (!suppressDefaultLog) + Logger.LogError(exception, "An error occurred while deserializing the {code} response.", httpStatusCode); + } + + partial void OnDeserializationError(ref bool suppressDefaultLog, Exception exception, HttpStatusCode httpStatusCode); + } } } diff --git a/samples/client/petstore/csharp/generichost/net9/SourceGeneration/src/Org.OpenAPITools/Api/FakeApi.cs b/samples/client/petstore/csharp/generichost/net9/SourceGeneration/src/Org.OpenAPITools/Api/FakeApi.cs index a8cd8a748f54..5706daa419cb 100644 --- a/samples/client/petstore/csharp/generichost/net9/SourceGeneration/src/Org.OpenAPITools/Api/FakeApi.cs +++ b/samples/client/petstore/csharp/generichost/net9/SourceGeneration/src/Org.OpenAPITools/Api/FakeApi.cs @@ -4035,7 +4035,6 @@ public async Task TestEndpointParametersAsyn if (binary.IsSet) multipartContentLocalVar.Add(new StreamContent(binary.Value)); - if (callback.IsSet) formParameterLocalVars.Add(new KeyValuePair("callback", ClientUtils.ParameterToString(callback.Value))); @@ -4357,7 +4356,9 @@ public async Task TestEnumParametersAsync(Option List> formParameterLocalVars = new List>(); - multipartContentLocalVar.Add(new FormUrlEncodedContent(formParameterLocalVars)); if (enumFormString.IsSet) + multipartContentLocalVar.Add(new FormUrlEncodedContent(formParameterLocalVars)); + + if (enumFormString.IsSet) formParameterLocalVars.Add(new KeyValuePair("enum_form_string", ClientUtils.ParameterToString(enumFormString.Value))); if (enumFormStringArray.IsSet) diff --git a/samples/client/petstore/csharp/generichost/net9/SourceGeneration/src/Org.OpenAPITools/Api/PetApi.cs b/samples/client/petstore/csharp/generichost/net9/SourceGeneration/src/Org.OpenAPITools/Api/PetApi.cs index 37841e79d60b..bfdcce3fe2e7 100644 --- a/samples/client/petstore/csharp/generichost/net9/SourceGeneration/src/Org.OpenAPITools/Api/PetApi.cs +++ b/samples/client/petstore/csharp/generichost/net9/SourceGeneration/src/Org.OpenAPITools/Api/PetApi.cs @@ -2204,7 +2204,9 @@ public async Task UpdatePetWithFormAsync(long pet List> formParameterLocalVars = new List>(); - multipartContentLocalVar.Add(new FormUrlEncodedContent(formParameterLocalVars)); if (name.IsSet) + multipartContentLocalVar.Add(new FormUrlEncodedContent(formParameterLocalVars)); + + if (name.IsSet) formParameterLocalVars.Add(new KeyValuePair("name", ClientUtils.ParameterToString(name.Value))); if (status.IsSet) @@ -2431,12 +2433,13 @@ public async Task UploadFileAsync(long petId, Option> formParameterLocalVars = new List>(); - multipartContentLocalVar.Add(new FormUrlEncodedContent(formParameterLocalVars)); if (additionalMetadata.IsSet) + multipartContentLocalVar.Add(new FormUrlEncodedContent(formParameterLocalVars)); + + if (additionalMetadata.IsSet) formParameterLocalVars.Add(new KeyValuePair("additionalMetadata", ClientUtils.ParameterToString(additionalMetadata.Value))); if (file.IsSet) multipartContentLocalVar.Add(new StreamContent(file.Value)); - List tokenBaseLocalVars = new List(); httpRequestMessageLocalVar.RequestUri = uriBuilderLocalVar.Uri; @@ -2699,7 +2702,9 @@ public async Task UploadFileWithRequired List> formParameterLocalVars = new List>(); - multipartContentLocalVar.Add(new FormUrlEncodedContent(formParameterLocalVars)); multipartContentLocalVar.Add(new StreamContent(requiredFile)); + multipartContentLocalVar.Add(new FormUrlEncodedContent(formParameterLocalVars)); + + multipartContentLocalVar.Add(new StreamContent(requiredFile)); if (additionalMetadata.IsSet) formParameterLocalVars.Add(new KeyValuePair("additionalMetadata", ClientUtils.ParameterToString(additionalMetadata.Value))); diff --git a/samples/client/petstore/csharp/generichost/net9/SourceGeneration/src/Org.OpenAPITools/Client/HostConfiguration.cs b/samples/client/petstore/csharp/generichost/net9/SourceGeneration/src/Org.OpenAPITools/Client/HostConfiguration.cs index 759667956526..5f71cc26d315 100644 --- a/samples/client/petstore/csharp/generichost/net9/SourceGeneration/src/Org.OpenAPITools/Client/HostConfiguration.cs +++ b/samples/client/petstore/csharp/generichost/net9/SourceGeneration/src/Org.OpenAPITools/Client/HostConfiguration.cs @@ -148,6 +148,7 @@ public HostConfiguration(IServiceCollection services) _jsonOptions.Converters.Add(new TestResultCodeNullableJsonConverter()); _jsonOptions.Converters.Add(new TriangleJsonConverter()); _jsonOptions.Converters.Add(new TriangleInterfaceJsonConverter()); + _jsonOptions.Converters.Add(new UploadFiles200ResponseJsonConverter()); _jsonOptions.Converters.Add(new UserJsonConverter()); _jsonOptions.Converters.Add(new WhaleJsonConverter()); _jsonOptions.Converters.Add(new ZebraJsonConverter()); @@ -256,6 +257,7 @@ public HostConfiguration(IServiceCollection services) new TestResultCodeSerializationContext(), new TriangleSerializationContext(), new TriangleInterfaceSerializationContext(), + new UploadFiles200ResponseSerializationContext(), new UserSerializationContext(), new WhaleSerializationContext(), new ZebraSerializationContext(), diff --git a/samples/client/petstore/csharp/generichost/net9/SourceGeneration/src/Org.OpenAPITools/Model/UploadFiles200Response.cs b/samples/client/petstore/csharp/generichost/net9/SourceGeneration/src/Org.OpenAPITools/Model/UploadFiles200Response.cs new file mode 100644 index 000000000000..05774844e280 --- /dev/null +++ b/samples/client/petstore/csharp/generichost/net9/SourceGeneration/src/Org.OpenAPITools/Model/UploadFiles200Response.cs @@ -0,0 +1,210 @@ +// +/* + * OpenAPI Petstore + * + * This spec is mainly for testing Petstore server and contains fake endpoints, models. Please do not use this for any other purpose. Special characters: \" \\ + * + * The version of the OpenAPI document: 1.0.0 + * Generated by: https://github.com/openapitools/openapi-generator.git + */ + +#nullable enable + +using System; +using System.Collections; +using System.Collections.Generic; +using System.Collections.ObjectModel; +using System.Linq; +using System.IO; +using System.Text; +using System.Text.RegularExpressions; +using System.Text.Json; +using System.Text.Json.Serialization; +using System.ComponentModel.DataAnnotations; +using OpenAPIClientUtils = Org.OpenAPITools.Client.ClientUtils; +using System.Text.Json.Serialization.Metadata; +using Org.OpenAPITools.Client; + +namespace Org.OpenAPITools.Model +{ + /// + /// UploadFiles200Response + /// + public partial class UploadFiles200Response : IValidatableObject + { + /// + /// Initializes a new instance of the class. + /// + /// fileCount + /// message + [JsonConstructor] + public UploadFiles200Response(Option fileCount = default, Option message = default) + { + FileCountOption = fileCount; + MessageOption = message; + OnCreated(); + } + + partial void OnCreated(); + + /// + /// Used to track the state of FileCount + /// + [JsonIgnore] + [global::System.ComponentModel.EditorBrowsable(global::System.ComponentModel.EditorBrowsableState.Never)] + public Option FileCountOption { get; private set; } + + /// + /// Gets or Sets FileCount + /// + [JsonPropertyName("fileCount")] + public int? FileCount { get { return this.FileCountOption; } set { this.FileCountOption = new(value); } } + + /// + /// Used to track the state of Message + /// + [JsonIgnore] + [global::System.ComponentModel.EditorBrowsable(global::System.ComponentModel.EditorBrowsableState.Never)] + public Option MessageOption { get; private set; } + + /// + /// Gets or Sets Message + /// + [JsonPropertyName("message")] + public string? Message { get { return this.MessageOption; } set { this.MessageOption = new(value); } } + + /// + /// Gets or Sets additional properties + /// + [JsonExtensionData] + public Dictionary AdditionalProperties { get; } = new Dictionary(); + + /// + /// Returns the string presentation of the object + /// + /// String presentation of the object + public override string ToString() + { + StringBuilder sb = new StringBuilder(); + sb.Append("class UploadFiles200Response {\n"); + sb.Append(" FileCount: ").Append(FileCount).Append("\n"); + sb.Append(" Message: ").Append(Message).Append("\n"); + sb.Append(" AdditionalProperties: ").Append(AdditionalProperties).Append("\n"); + sb.Append("}\n"); + return sb.ToString(); + } + + /// + /// To validate all properties of the instance + /// + /// Validation context + /// Validation Result + IEnumerable IValidatableObject.Validate(ValidationContext validationContext) + { + yield break; + } + } + + /// + /// A Json converter for type + /// + public class UploadFiles200ResponseJsonConverter : JsonConverter + { + /// + /// Deserializes json to + /// + /// + /// + /// + /// + /// + public override UploadFiles200Response Read(ref Utf8JsonReader utf8JsonReader, Type typeToConvert, JsonSerializerOptions jsonSerializerOptions) + { + int currentDepth = utf8JsonReader.CurrentDepth; + + if (utf8JsonReader.TokenType != JsonTokenType.StartObject && utf8JsonReader.TokenType != JsonTokenType.StartArray) + throw new JsonException(); + + JsonTokenType startingTokenType = utf8JsonReader.TokenType; + + Option fileCount = default; + Option message = default; + + while (utf8JsonReader.Read()) + { + if (startingTokenType == JsonTokenType.StartObject && utf8JsonReader.TokenType == JsonTokenType.EndObject && currentDepth == utf8JsonReader.CurrentDepth) + break; + + if (startingTokenType == JsonTokenType.StartArray && utf8JsonReader.TokenType == JsonTokenType.EndArray && currentDepth == utf8JsonReader.CurrentDepth) + break; + + if (utf8JsonReader.TokenType == JsonTokenType.PropertyName && currentDepth == utf8JsonReader.CurrentDepth - 1) + { + string? localVarJsonPropertyName = utf8JsonReader.GetString(); + utf8JsonReader.Read(); + + switch (localVarJsonPropertyName) + { + case "fileCount": + fileCount = new Option(utf8JsonReader.TokenType == JsonTokenType.Null ? (int?)null : utf8JsonReader.GetInt32()); + break; + case "message": + message = new Option(utf8JsonReader.GetString()!); + break; + default: + break; + } + } + } + + if (fileCount.IsSet && fileCount.Value == null) + throw new ArgumentNullException(nameof(fileCount), "Property is not nullable for class UploadFiles200Response."); + + if (message.IsSet && message.Value == null) + throw new ArgumentNullException(nameof(message), "Property is not nullable for class UploadFiles200Response."); + + return new UploadFiles200Response(fileCount, message); + } + + /// + /// Serializes a + /// + /// + /// + /// + /// + public override void Write(Utf8JsonWriter writer, UploadFiles200Response uploadFiles200Response, JsonSerializerOptions jsonSerializerOptions) + { + writer.WriteStartObject(); + + WriteProperties(writer, uploadFiles200Response, jsonSerializerOptions); + writer.WriteEndObject(); + } + + /// + /// Serializes the properties of + /// + /// + /// + /// + /// + public void WriteProperties(Utf8JsonWriter writer, UploadFiles200Response uploadFiles200Response, JsonSerializerOptions jsonSerializerOptions) + { + if (uploadFiles200Response.MessageOption.IsSet && uploadFiles200Response.Message == null) + throw new ArgumentNullException(nameof(uploadFiles200Response.Message), "Property is required for class UploadFiles200Response."); + + if (uploadFiles200Response.FileCountOption.IsSet) + writer.WriteNumber("fileCount", uploadFiles200Response.FileCountOption.Value!.Value); + + if (uploadFiles200Response.MessageOption.IsSet) + writer.WriteString("message", uploadFiles200Response.Message); + } + } + + /// + /// The UploadFiles200ResponseSerializationContext + /// + [JsonSourceGenerationOptions(WriteIndented = true, GenerationMode = JsonSourceGenerationMode.Metadata | JsonSourceGenerationMode.Serialization)] + [JsonSerializable(typeof(UploadFiles200Response))] + public partial class UploadFiles200ResponseSerializationContext : JsonSerializerContext { } +} diff --git a/samples/client/petstore/csharp/generichost/net9/SourceGeneration/src/Org.OpenAPITools/README.md b/samples/client/petstore/csharp/generichost/net9/SourceGeneration/src/Org.OpenAPITools/README.md index 6b370c7bd33d..62be25ea883f 100644 --- a/samples/client/petstore/csharp/generichost/net9/SourceGeneration/src/Org.OpenAPITools/README.md +++ b/samples/client/petstore/csharp/generichost/net9/SourceGeneration/src/Org.OpenAPITools/README.md @@ -115,5 +115,5 @@ namespace YourProject This C# SDK is automatically generated by the [OpenAPI Generator](https://openapi-generator.tech) project. - SDK version: 1.0.0 -- Generator version: 7.14.0-SNAPSHOT +- Generator version: 7.14.0 - Build package: org.openapitools.codegen.languages.CSharpClientCodegen diff --git a/samples/client/petstore/csharp/generichost/net9/UseDateTimeForDate/.openapi-generator/VERSION b/samples/client/petstore/csharp/generichost/net9/UseDateTimeForDate/.openapi-generator/VERSION index 4c631cf217a2..e465da43155f 100644 --- a/samples/client/petstore/csharp/generichost/net9/UseDateTimeForDate/.openapi-generator/VERSION +++ b/samples/client/petstore/csharp/generichost/net9/UseDateTimeForDate/.openapi-generator/VERSION @@ -1 +1 @@ -7.14.0-SNAPSHOT +7.14.0 diff --git a/samples/client/petstore/csharp/generichost/net9/UseDateTimeForDate/src/Org.OpenAPITools/README.md b/samples/client/petstore/csharp/generichost/net9/UseDateTimeForDate/src/Org.OpenAPITools/README.md index bc3fce2b2416..52a3de74077d 100644 --- a/samples/client/petstore/csharp/generichost/net9/UseDateTimeForDate/src/Org.OpenAPITools/README.md +++ b/samples/client/petstore/csharp/generichost/net9/UseDateTimeForDate/src/Org.OpenAPITools/README.md @@ -107,5 +107,5 @@ namespace YourProject This C# SDK is automatically generated by the [OpenAPI Generator](https://openapi-generator.tech) project. - SDK version: 1.0.0 -- Generator version: 7.14.0-SNAPSHOT +- Generator version: 7.14.0 - Build package: org.openapitools.codegen.languages.CSharpClientCodegen diff --git a/samples/client/petstore/csharp/generichost/standard2.0/Petstore/.openapi-generator/FILES b/samples/client/petstore/csharp/generichost/standard2.0/Petstore/.openapi-generator/FILES index a6635c9d8351..d6f015766350 100644 --- a/samples/client/petstore/csharp/generichost/standard2.0/Petstore/.openapi-generator/FILES +++ b/samples/client/petstore/csharp/generichost/standard2.0/Petstore/.openapi-generator/FILES @@ -108,6 +108,7 @@ docs/models/TestResult.md docs/models/TestResultCode.md docs/models/Triangle.md docs/models/TriangleInterface.md +docs/models/UploadFiles200Response.md docs/models/User.md docs/models/Whale.md docs/models/Zebra.md @@ -116,6 +117,7 @@ docs/models/ZeroBasedEnumClass.md docs/scripts/git_push.ps1 docs/scripts/git_push.sh src/Org.OpenAPITools.Test/Api/DependencyInjectionTests.cs +src/Org.OpenAPITools.Test/Model/UploadFiles200ResponseTests.cs src/Org.OpenAPITools.Test/Org.OpenAPITools.Test.csproj src/Org.OpenAPITools.Test/README.md src/Org.OpenAPITools/Api/AnotherFakeApi.cs @@ -249,6 +251,7 @@ src/Org.OpenAPITools/Model/TestResult.cs src/Org.OpenAPITools/Model/TestResultCode.cs src/Org.OpenAPITools/Model/Triangle.cs src/Org.OpenAPITools/Model/TriangleInterface.cs +src/Org.OpenAPITools/Model/UploadFiles200Response.cs src/Org.OpenAPITools/Model/User.cs src/Org.OpenAPITools/Model/Whale.cs src/Org.OpenAPITools/Model/Zebra.cs diff --git a/samples/client/petstore/csharp/generichost/standard2.0/Petstore/.openapi-generator/VERSION b/samples/client/petstore/csharp/generichost/standard2.0/Petstore/.openapi-generator/VERSION index 4c631cf217a2..e465da43155f 100644 --- a/samples/client/petstore/csharp/generichost/standard2.0/Petstore/.openapi-generator/VERSION +++ b/samples/client/petstore/csharp/generichost/standard2.0/Petstore/.openapi-generator/VERSION @@ -1 +1 @@ -7.14.0-SNAPSHOT +7.14.0 diff --git a/samples/client/petstore/csharp/generichost/standard2.0/Petstore/api/openapi.yaml b/samples/client/petstore/csharp/generichost/standard2.0/Petstore/api/openapi.yaml index d86a1d2f6d87..276850a46bc1 100644 --- a/samples/client/petstore/csharp/generichost/standard2.0/Petstore/api/openapi.yaml +++ b/samples/client/petstore/csharp/generichost/standard2.0/Petstore/api/openapi.yaml @@ -41,6 +41,23 @@ tags: - description: Operations about user name: user paths: + /upload: + post: + operationId: uploadFiles + requestBody: + content: + multipart/form-data: + schema: + $ref: "#/components/schemas/uploadFiles_request" + required: true + responses: + "200": + content: + application/json: + schema: + $ref: "#/components/schemas/uploadFiles_200_response" + description: Files uploaded successfully + summary: Upload multiple files /roles/report: get: responses: @@ -2865,6 +2882,26 @@ components: - APPROVED - MANUAL_APPROVAL_REQUIRED type: string + uploadFiles_request: + properties: + files: + items: + format: binary + type: string + type: array + required: + - files + type: object + uploadFiles_200_response: + example: + message: message + fileCount: 0 + properties: + message: + type: string + fileCount: + type: integer + type: object _foo_get_default_response: example: string: diff --git a/samples/client/petstore/csharp/generichost/standard2.0/Petstore/docs/apis/DefaultApi.md b/samples/client/petstore/csharp/generichost/standard2.0/Petstore/docs/apis/DefaultApi.md index e97541b8b6a5..0fa36d06dcaf 100644 --- a/samples/client/petstore/csharp/generichost/standard2.0/Petstore/docs/apis/DefaultApi.md +++ b/samples/client/petstore/csharp/generichost/standard2.0/Petstore/docs/apis/DefaultApi.md @@ -9,6 +9,7 @@ All URIs are relative to *http://petstore.swagger.io:80/v2* | [**Hello**](DefaultApi.md#hello) | **GET** /hello | Hello | | [**RolesReportGet**](DefaultApi.md#rolesreportget) | **GET** /roles/report | | | [**Test**](DefaultApi.md#test) | **GET** /test | Retrieve an existing Notificationtest's Elements | +| [**UploadFiles**](DefaultApi.md#uploadfiles) | **POST** /upload | Upload multiple files | # **FooGet** @@ -166,3 +167,37 @@ No authorization required [[Back to top]](#) [[Back to API list]](../../README.md#documentation-for-api-endpoints) [[Back to Model list]](../../README.md#documentation-for-models) [[Back to README]](../../README.md) + +# **UploadFiles** +> UploadFiles200Response UploadFiles (List files) + +Upload multiple files + + +### Parameters + +| Name | Type | Description | Notes | +|------|------|-------------|-------| +| **files** | **List<System.IO.Stream>** | | | + +### Return type + +[**UploadFiles200Response**](UploadFiles200Response.md) + +### Authorization + +No authorization required + +### HTTP request headers + + - **Content-Type**: multipart/form-data + - **Accept**: application/json + + +### HTTP response details +| Status code | Description | Response headers | +|-------------|-------------|------------------| +| **200** | Files uploaded successfully | - | + +[[Back to top]](#) [[Back to API list]](../../README.md#documentation-for-api-endpoints) [[Back to Model list]](../../README.md#documentation-for-models) [[Back to README]](../../README.md) + diff --git a/samples/client/petstore/csharp/generichost/standard2.0/Petstore/docs/models/UploadFiles200Response.md b/samples/client/petstore/csharp/generichost/standard2.0/Petstore/docs/models/UploadFiles200Response.md new file mode 100644 index 000000000000..8e32fc151b34 --- /dev/null +++ b/samples/client/petstore/csharp/generichost/standard2.0/Petstore/docs/models/UploadFiles200Response.md @@ -0,0 +1,11 @@ +# Org.OpenAPITools.Model.UploadFiles200Response + +## Properties + +Name | Type | Description | Notes +------------ | ------------- | ------------- | ------------- +**FileCount** | **int** | | [optional] +**Message** | **string** | | [optional] + +[[Back to Model list]](../../README.md#documentation-for-models) [[Back to API list]](../../README.md#documentation-for-api-endpoints) [[Back to README]](../../README.md) + diff --git a/samples/client/petstore/csharp/generichost/standard2.0/Petstore/src/Org.OpenAPITools.Test/Model/UploadFiles200ResponseTests.cs b/samples/client/petstore/csharp/generichost/standard2.0/Petstore/src/Org.OpenAPITools.Test/Model/UploadFiles200ResponseTests.cs new file mode 100644 index 000000000000..e6003ac29cfe --- /dev/null +++ b/samples/client/petstore/csharp/generichost/standard2.0/Petstore/src/Org.OpenAPITools.Test/Model/UploadFiles200ResponseTests.cs @@ -0,0 +1,74 @@ +/* + * OpenAPI Petstore + * + * This spec is mainly for testing Petstore server and contains fake endpoints, models. Please do not use this for any other purpose. Special characters: \" \\ + * + * The version of the OpenAPI document: 1.0.0 + * Generated by: https://github.com/openapitools/openapi-generator.git + */ + + +using Xunit; + +using System; +using System.Linq; +using System.IO; +using System.Collections.Generic; +using Org.OpenAPITools.Model; +using Org.OpenAPITools.Client; +using System.Reflection; + +namespace Org.OpenAPITools.Test.Model +{ + /// + /// Class for testing UploadFiles200Response + /// + /// + /// This file is automatically generated by OpenAPI Generator (https://openapi-generator.tech). + /// Please update the test case below to test the model. + /// + public class UploadFiles200ResponseTests : IDisposable + { + // TODO uncomment below to declare an instance variable for UploadFiles200Response + //private UploadFiles200Response instance; + + public UploadFiles200ResponseTests() + { + // TODO uncomment below to create an instance of UploadFiles200Response + //instance = new UploadFiles200Response(); + } + + public void Dispose() + { + // Cleanup when everything is done. + } + + /// + /// Test an instance of UploadFiles200Response + /// + [Fact] + public void UploadFiles200ResponseInstanceTest() + { + // TODO uncomment below to test "IsType" UploadFiles200Response + //Assert.IsType(instance); + } + + /// + /// Test the property 'FileCount' + /// + [Fact] + public void FileCountTest() + { + // TODO unit test for the property 'FileCount' + } + + /// + /// Test the property 'Message' + /// + [Fact] + public void MessageTest() + { + // TODO unit test for the property 'Message' + } + } +} diff --git a/samples/client/petstore/csharp/generichost/standard2.0/Petstore/src/Org.OpenAPITools/Api/DefaultApi.cs b/samples/client/petstore/csharp/generichost/standard2.0/Petstore/src/Org.OpenAPITools/Api/DefaultApi.cs index 44e664fb69b7..bc0e6ef5f6f7 100644 --- a/samples/client/petstore/csharp/generichost/standard2.0/Petstore/src/Org.OpenAPITools/Api/DefaultApi.cs +++ b/samples/client/petstore/csharp/generichost/standard2.0/Petstore/src/Org.OpenAPITools/Api/DefaultApi.cs @@ -138,6 +138,29 @@ public interface IDefaultApi : IApi /// Cancellation Token to cancel the request. /// <> Task TestOrDefaultAsync(System.Threading.CancellationToken cancellationToken = default); + + /// + /// Upload multiple files + /// + /// + /// + /// + /// Thrown when fails to make API call + /// + /// Cancellation Token to cancel the request. + /// <> + Task UploadFilesAsync(List files, System.Threading.CancellationToken cancellationToken = default); + + /// + /// Upload multiple files + /// + /// + /// + /// + /// + /// Cancellation Token to cancel the request. + /// <> + Task UploadFilesOrDefaultAsync(List files, System.Threading.CancellationToken cancellationToken = default); } /// @@ -200,6 +223,18 @@ public interface ITestApiResponse : Org.OpenAPITools.Client.IApiResponse, IOk + /// The + /// + public interface IUploadFilesApiResponse : Org.OpenAPITools.Client.IApiResponse, IOk + { + /// + /// Returns true if the response is 200 Ok + /// + /// + bool IsOk { get; } + } + /// /// Represents a collection of functions to interact with the API endpoints /// @@ -304,6 +339,26 @@ internal void ExecuteOnErrorTest(Exception exception) { OnErrorTest?.Invoke(this, new ExceptionEventArgs(exception)); } + + /// + /// The event raised after the server response + /// + public event EventHandler OnUploadFiles; + + /// + /// The event raised after an error querying the server + /// + public event EventHandler OnErrorUploadFiles; + + internal void ExecuteOnUploadFiles(DefaultApi.UploadFilesApiResponse apiResponse) + { + OnUploadFiles?.Invoke(this, new ApiResponseEventArgs(apiResponse)); + } + + internal void ExecuteOnErrorUploadFiles(Exception exception) + { + OnErrorUploadFiles?.Invoke(this, new ExceptionEventArgs(exception)); + } } /// @@ -1357,5 +1412,251 @@ private void OnDeserializationErrorDefaultImplementation(Exception exception, Ht partial void OnDeserializationError(ref bool suppressDefaultLog, Exception exception, HttpStatusCode httpStatusCode); } + + partial void FormatUploadFiles(List files); + + /// + /// Validates the request parameters + /// + /// + /// + private void ValidateUploadFiles(List files) + { + if (files == null) + throw new ArgumentNullException(nameof(files)); + } + + /// + /// Processes the server response + /// + /// + /// + private void AfterUploadFilesDefaultImplementation(IUploadFilesApiResponse apiResponseLocalVar, List files) + { + bool suppressDefaultLog = false; + AfterUploadFiles(ref suppressDefaultLog, apiResponseLocalVar, files); + if (!suppressDefaultLog) + Logger.LogInformation("{0,-9} | {1} | {3}", (apiResponseLocalVar.DownloadedAt - apiResponseLocalVar.RequestedAt).TotalSeconds, apiResponseLocalVar.StatusCode, apiResponseLocalVar.Path); + } + + /// + /// Processes the server response + /// + /// + /// + /// + partial void AfterUploadFiles(ref bool suppressDefaultLog, IUploadFilesApiResponse apiResponseLocalVar, List files); + + /// + /// Logs exceptions that occur while retrieving the server response + /// + /// + /// + /// + /// + private void OnErrorUploadFilesDefaultImplementation(Exception exceptionLocalVar, string pathFormatLocalVar, string pathLocalVar, List files) + { + bool suppressDefaultLogLocalVar = false; + OnErrorUploadFiles(ref suppressDefaultLogLocalVar, exceptionLocalVar, pathFormatLocalVar, pathLocalVar, files); + if (!suppressDefaultLogLocalVar) + Logger.LogError(exceptionLocalVar, "An error occurred while sending the request to the server."); + } + + /// + /// A partial method that gives developers a way to provide customized exception handling + /// + /// + /// + /// + /// + /// + partial void OnErrorUploadFiles(ref bool suppressDefaultLogLocalVar, Exception exceptionLocalVar, string pathFormatLocalVar, string pathLocalVar, List files); + + /// + /// Upload multiple files + /// + /// + /// Cancellation Token to cancel the request. + /// <> + public async Task UploadFilesOrDefaultAsync(List files, System.Threading.CancellationToken cancellationToken = default) + { + try + { + return await UploadFilesAsync(files, cancellationToken).ConfigureAwait(false); + } + catch (Exception) + { + return null; + } + } + + /// + /// Upload multiple files + /// + /// Thrown when fails to make API call + /// + /// Cancellation Token to cancel the request. + /// <> + public async Task UploadFilesAsync(List files, System.Threading.CancellationToken cancellationToken = default) + { + UriBuilder uriBuilderLocalVar = new UriBuilder(); + + try + { + ValidateUploadFiles(files); + + FormatUploadFiles(files); + + using (HttpRequestMessage httpRequestMessageLocalVar = new HttpRequestMessage()) + { + uriBuilderLocalVar.Host = HttpClient.BaseAddress.Host; + uriBuilderLocalVar.Port = HttpClient.BaseAddress.Port; + uriBuilderLocalVar.Scheme = HttpClient.BaseAddress.Scheme; + uriBuilderLocalVar.Path = HttpClient.BaseAddress.AbsolutePath == "/" + ? "/upload" + : string.Concat(HttpClient.BaseAddress.AbsolutePath, "/upload"); + + MultipartContent multipartContentLocalVar = new MultipartContent(); + + httpRequestMessageLocalVar.Content = multipartContentLocalVar; + + List> formParameterLocalVars = new List>(); + + multipartContentLocalVar.Add(new FormUrlEncodedContent(formParameterLocalVars)); + + foreach (global::System.IO.Stream streamLocalVar in files) + { + 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); + } + + httpRequestMessageLocalVar.RequestUri = uriBuilderLocalVar.Uri; + + string[] contentTypes = new string[] { + "multipart/form-data" + }; + + string contentTypeLocalVar = ClientUtils.SelectHeaderContentType(contentTypes); + + if (contentTypeLocalVar != null && httpRequestMessageLocalVar.Content != null) + httpRequestMessageLocalVar.Content.Headers.ContentType = new MediaTypeHeaderValue(contentTypeLocalVar); + + string[] acceptLocalVars = new string[] { + "application/json" + }; + + string acceptLocalVar = ClientUtils.SelectHeaderAccept(acceptLocalVars); + + if (acceptLocalVar != null) + httpRequestMessageLocalVar.Headers.Accept.Add(new MediaTypeWithQualityHeaderValue(acceptLocalVar)); + httpRequestMessageLocalVar.Method = new HttpMethod("POST"); + + DateTime requestedAtLocalVar = DateTime.UtcNow; + + using (HttpResponseMessage httpResponseMessageLocalVar = await HttpClient.SendAsync(httpRequestMessageLocalVar, cancellationToken).ConfigureAwait(false)) + { + string responseContentLocalVar = await httpResponseMessageLocalVar.Content.ReadAsStringAsync().ConfigureAwait(false); + + ILogger apiResponseLoggerLocalVar = LoggerFactory.CreateLogger(); + + UploadFilesApiResponse apiResponseLocalVar = new UploadFilesApiResponse(apiResponseLoggerLocalVar, httpRequestMessageLocalVar, httpResponseMessageLocalVar, responseContentLocalVar, "/upload", requestedAtLocalVar, _jsonSerializerOptions); + + AfterUploadFilesDefaultImplementation(apiResponseLocalVar, files); + + Events.ExecuteOnUploadFiles(apiResponseLocalVar); + + return apiResponseLocalVar; + } + } + } + catch(Exception e) + { + OnErrorUploadFilesDefaultImplementation(e, "/upload", uriBuilderLocalVar.Path, files); + Events.ExecuteOnErrorUploadFiles(e); + throw; + } + } + + /// + /// The + /// + public partial class UploadFilesApiResponse : Org.OpenAPITools.Client.ApiResponse, IUploadFilesApiResponse + { + /// + /// The logger + /// + public ILogger Logger { get; } + + /// + /// The + /// + /// + /// + /// + /// + /// + /// + /// + public UploadFilesApiResponse(ILogger logger, System.Net.Http.HttpRequestMessage httpRequestMessage, System.Net.Http.HttpResponseMessage httpResponseMessage, string rawContent, string path, DateTime requestedAt, System.Text.Json.JsonSerializerOptions jsonSerializerOptions) : base(httpRequestMessage, httpResponseMessage, rawContent, path, requestedAt, jsonSerializerOptions) + { + Logger = logger; + OnCreated(httpRequestMessage, httpResponseMessage); + } + + partial void OnCreated(global::System.Net.Http.HttpRequestMessage httpRequestMessage, System.Net.Http.HttpResponseMessage httpResponseMessage); + + /// + /// Returns true if the response is 200 Ok + /// + /// + public bool IsOk => 200 == (int)StatusCode; + + /// + /// Deserializes the response if the response is 200 Ok + /// + /// + public Org.OpenAPITools.Model.UploadFiles200Response Ok() + { + // This logic may be modified with the AsModel.mustache template + return IsOk + ? System.Text.Json.JsonSerializer.Deserialize(RawContent, _jsonSerializerOptions) + : default; + } + + /// + /// Returns true if the response is 200 Ok and the deserialized response is not null + /// + /// + /// + public bool TryOk(out Org.OpenAPITools.Model.UploadFiles200Response result) + { + result = null; + + try + { + result = Ok(); + } catch (Exception e) + { + OnDeserializationErrorDefaultImplementation(e, (HttpStatusCode)200); + } + + return result != null; + } + + private void OnDeserializationErrorDefaultImplementation(Exception exception, HttpStatusCode httpStatusCode) + { + bool suppressDefaultLog = false; + OnDeserializationError(ref suppressDefaultLog, exception, httpStatusCode); + if (!suppressDefaultLog) + Logger.LogError(exception, "An error occurred while deserializing the {code} response.", httpStatusCode); + } + + partial void OnDeserializationError(ref bool suppressDefaultLog, Exception exception, HttpStatusCode httpStatusCode); + } } } diff --git a/samples/client/petstore/csharp/generichost/standard2.0/Petstore/src/Org.OpenAPITools/Api/FakeApi.cs b/samples/client/petstore/csharp/generichost/standard2.0/Petstore/src/Org.OpenAPITools/Api/FakeApi.cs index 16673cc0ebfd..bafc46fe199a 100644 --- a/samples/client/petstore/csharp/generichost/standard2.0/Petstore/src/Org.OpenAPITools/Api/FakeApi.cs +++ b/samples/client/petstore/csharp/generichost/standard2.0/Petstore/src/Org.OpenAPITools/Api/FakeApi.cs @@ -4023,7 +4023,6 @@ public async Task TestEndpointParametersAsyn if (binary.IsSet) multipartContentLocalVar.Add(new StreamContent(binary.Value)); - if (callback.IsSet) formParameterLocalVars.Add(new KeyValuePair("callback", ClientUtils.ParameterToString(callback.Value))); @@ -4345,7 +4344,9 @@ public async Task TestEnumParametersAsync(Option List> formParameterLocalVars = new List>(); - multipartContentLocalVar.Add(new FormUrlEncodedContent(formParameterLocalVars)); if (enumFormString.IsSet) + multipartContentLocalVar.Add(new FormUrlEncodedContent(formParameterLocalVars)); + + if (enumFormString.IsSet) formParameterLocalVars.Add(new KeyValuePair("enum_form_string", ClientUtils.ParameterToString(enumFormString.Value))); if (enumFormStringArray.IsSet) diff --git a/samples/client/petstore/csharp/generichost/standard2.0/Petstore/src/Org.OpenAPITools/Api/PetApi.cs b/samples/client/petstore/csharp/generichost/standard2.0/Petstore/src/Org.OpenAPITools/Api/PetApi.cs index 3b794ad787d6..2023197a9e95 100644 --- a/samples/client/petstore/csharp/generichost/standard2.0/Petstore/src/Org.OpenAPITools/Api/PetApi.cs +++ b/samples/client/petstore/csharp/generichost/standard2.0/Petstore/src/Org.OpenAPITools/Api/PetApi.cs @@ -2197,7 +2197,9 @@ public async Task UpdatePetWithFormAsync(long pet List> formParameterLocalVars = new List>(); - multipartContentLocalVar.Add(new FormUrlEncodedContent(formParameterLocalVars)); if (name.IsSet) + multipartContentLocalVar.Add(new FormUrlEncodedContent(formParameterLocalVars)); + + if (name.IsSet) formParameterLocalVars.Add(new KeyValuePair("name", ClientUtils.ParameterToString(name.Value))); if (status.IsSet) @@ -2424,12 +2426,13 @@ public async Task UploadFileAsync(long petId, Option> formParameterLocalVars = new List>(); - multipartContentLocalVar.Add(new FormUrlEncodedContent(formParameterLocalVars)); if (additionalMetadata.IsSet) + multipartContentLocalVar.Add(new FormUrlEncodedContent(formParameterLocalVars)); + + if (additionalMetadata.IsSet) formParameterLocalVars.Add(new KeyValuePair("additionalMetadata", ClientUtils.ParameterToString(additionalMetadata.Value))); if (file.IsSet) multipartContentLocalVar.Add(new StreamContent(file.Value)); - List tokenBaseLocalVars = new List(); httpRequestMessageLocalVar.RequestUri = uriBuilderLocalVar.Uri; @@ -2691,7 +2694,9 @@ public async Task UploadFileWithRequired List> formParameterLocalVars = new List>(); - multipartContentLocalVar.Add(new FormUrlEncodedContent(formParameterLocalVars)); multipartContentLocalVar.Add(new StreamContent(requiredFile)); + multipartContentLocalVar.Add(new FormUrlEncodedContent(formParameterLocalVars)); + + multipartContentLocalVar.Add(new StreamContent(requiredFile)); if (additionalMetadata.IsSet) formParameterLocalVars.Add(new KeyValuePair("additionalMetadata", ClientUtils.ParameterToString(additionalMetadata.Value))); diff --git a/samples/client/petstore/csharp/generichost/standard2.0/Petstore/src/Org.OpenAPITools/Client/HostConfiguration.cs b/samples/client/petstore/csharp/generichost/standard2.0/Petstore/src/Org.OpenAPITools/Client/HostConfiguration.cs index 5d658ec3769d..3196d6c9131b 100644 --- a/samples/client/petstore/csharp/generichost/standard2.0/Petstore/src/Org.OpenAPITools/Client/HostConfiguration.cs +++ b/samples/client/petstore/csharp/generichost/standard2.0/Petstore/src/Org.OpenAPITools/Client/HostConfiguration.cs @@ -144,6 +144,7 @@ public HostConfiguration(IServiceCollection services) _jsonOptions.Converters.Add(new TestResultCodeNullableJsonConverter()); _jsonOptions.Converters.Add(new TriangleJsonConverter()); _jsonOptions.Converters.Add(new TriangleInterfaceJsonConverter()); + _jsonOptions.Converters.Add(new UploadFiles200ResponseJsonConverter()); _jsonOptions.Converters.Add(new UserJsonConverter()); _jsonOptions.Converters.Add(new WhaleJsonConverter()); _jsonOptions.Converters.Add(new ZebraJsonConverter()); diff --git a/samples/client/petstore/csharp/generichost/standard2.0/Petstore/src/Org.OpenAPITools/Model/UploadFiles200Response.cs b/samples/client/petstore/csharp/generichost/standard2.0/Petstore/src/Org.OpenAPITools/Model/UploadFiles200Response.cs new file mode 100644 index 000000000000..9166257e1cbe --- /dev/null +++ b/samples/client/petstore/csharp/generichost/standard2.0/Petstore/src/Org.OpenAPITools/Model/UploadFiles200Response.cs @@ -0,0 +1,200 @@ +// +/* + * OpenAPI Petstore + * + * This spec is mainly for testing Petstore server and contains fake endpoints, models. Please do not use this for any other purpose. Special characters: \" \\ + * + * The version of the OpenAPI document: 1.0.0 + * Generated by: https://github.com/openapitools/openapi-generator.git + */ + +using System; +using System.Collections; +using System.Collections.Generic; +using System.Collections.ObjectModel; +using System.Linq; +using System.IO; +using System.Text; +using System.Text.RegularExpressions; +using System.Text.Json; +using System.Text.Json.Serialization; +using System.ComponentModel.DataAnnotations; +using OpenAPIClientUtils = Org.OpenAPITools.Client.ClientUtils; +using Org.OpenAPITools.Client; + +namespace Org.OpenAPITools.Model +{ + /// + /// UploadFiles200Response + /// + public partial class UploadFiles200Response : IValidatableObject + { + /// + /// Initializes a new instance of the class. + /// + /// fileCount + /// message + [JsonConstructor] + public UploadFiles200Response(Option fileCount = default, Option message = default) + { + FileCountOption = fileCount; + MessageOption = message; + OnCreated(); + } + + partial void OnCreated(); + + /// + /// Used to track the state of FileCount + /// + [JsonIgnore] + [global::System.ComponentModel.EditorBrowsable(global::System.ComponentModel.EditorBrowsableState.Never)] + public Option FileCountOption { get; private set; } + + /// + /// Gets or Sets FileCount + /// + [JsonPropertyName("fileCount")] + public int? FileCount { get { return this.FileCountOption; } set { this.FileCountOption = new Option(value); } } + + /// + /// Used to track the state of Message + /// + [JsonIgnore] + [global::System.ComponentModel.EditorBrowsable(global::System.ComponentModel.EditorBrowsableState.Never)] + public Option MessageOption { get; private set; } + + /// + /// Gets or Sets Message + /// + [JsonPropertyName("message")] + public string Message { get { return this.MessageOption; } set { this.MessageOption = new Option(value); } } + + /// + /// Gets or Sets additional properties + /// + [JsonExtensionData] + public Dictionary AdditionalProperties { get; } = new Dictionary(); + + /// + /// Returns the string presentation of the object + /// + /// String presentation of the object + public override string ToString() + { + StringBuilder sb = new StringBuilder(); + sb.Append("class UploadFiles200Response {\n"); + sb.Append(" FileCount: ").Append(FileCount).Append("\n"); + sb.Append(" Message: ").Append(Message).Append("\n"); + sb.Append(" AdditionalProperties: ").Append(AdditionalProperties).Append("\n"); + sb.Append("}\n"); + return sb.ToString(); + } + + /// + /// To validate all properties of the instance + /// + /// Validation context + /// Validation Result + IEnumerable IValidatableObject.Validate(ValidationContext validationContext) + { + yield break; + } + } + + /// + /// A Json converter for type + /// + public class UploadFiles200ResponseJsonConverter : JsonConverter + { + /// + /// Deserializes json to + /// + /// + /// + /// + /// + /// + public override UploadFiles200Response Read(ref Utf8JsonReader utf8JsonReader, Type typeToConvert, JsonSerializerOptions jsonSerializerOptions) + { + int currentDepth = utf8JsonReader.CurrentDepth; + + if (utf8JsonReader.TokenType != JsonTokenType.StartObject && utf8JsonReader.TokenType != JsonTokenType.StartArray) + throw new JsonException(); + + JsonTokenType startingTokenType = utf8JsonReader.TokenType; + + Option fileCount = default; + Option message = default; + + while (utf8JsonReader.Read()) + { + if (startingTokenType == JsonTokenType.StartObject && utf8JsonReader.TokenType == JsonTokenType.EndObject && currentDepth == utf8JsonReader.CurrentDepth) + break; + + if (startingTokenType == JsonTokenType.StartArray && utf8JsonReader.TokenType == JsonTokenType.EndArray && currentDepth == utf8JsonReader.CurrentDepth) + break; + + if (utf8JsonReader.TokenType == JsonTokenType.PropertyName && currentDepth == utf8JsonReader.CurrentDepth - 1) + { + string localVarJsonPropertyName = utf8JsonReader.GetString(); + utf8JsonReader.Read(); + + switch (localVarJsonPropertyName) + { + case "fileCount": + fileCount = new Option(utf8JsonReader.TokenType == JsonTokenType.Null ? (int?)null : utf8JsonReader.GetInt32()); + break; + case "message": + message = new Option(utf8JsonReader.GetString()); + break; + default: + break; + } + } + } + + if (fileCount.IsSet && fileCount.Value == null) + throw new ArgumentNullException(nameof(fileCount), "Property is not nullable for class UploadFiles200Response."); + + if (message.IsSet && message.Value == null) + throw new ArgumentNullException(nameof(message), "Property is not nullable for class UploadFiles200Response."); + + return new UploadFiles200Response(fileCount, message); + } + + /// + /// Serializes a + /// + /// + /// + /// + /// + public override void Write(Utf8JsonWriter writer, UploadFiles200Response uploadFiles200Response, JsonSerializerOptions jsonSerializerOptions) + { + writer.WriteStartObject(); + + WriteProperties(writer, uploadFiles200Response, jsonSerializerOptions); + writer.WriteEndObject(); + } + + /// + /// Serializes the properties of + /// + /// + /// + /// + /// + public void WriteProperties(Utf8JsonWriter writer, UploadFiles200Response uploadFiles200Response, JsonSerializerOptions jsonSerializerOptions) + { + if (uploadFiles200Response.MessageOption.IsSet && uploadFiles200Response.Message == null) + throw new ArgumentNullException(nameof(uploadFiles200Response.Message), "Property is required for class UploadFiles200Response."); + + if (uploadFiles200Response.FileCountOption.IsSet) + writer.WriteNumber("fileCount", uploadFiles200Response.FileCountOption.Value.Value); + + if (uploadFiles200Response.MessageOption.IsSet) + writer.WriteString("message", uploadFiles200Response.Message); + } + } +} diff --git a/samples/client/petstore/csharp/generichost/standard2.0/Petstore/src/Org.OpenAPITools/README.md b/samples/client/petstore/csharp/generichost/standard2.0/Petstore/src/Org.OpenAPITools/README.md index 80f8c6bea340..c4d7b255ae76 100644 --- a/samples/client/petstore/csharp/generichost/standard2.0/Petstore/src/Org.OpenAPITools/README.md +++ b/samples/client/petstore/csharp/generichost/standard2.0/Petstore/src/Org.OpenAPITools/README.md @@ -115,5 +115,5 @@ namespace YourProject This C# SDK is automatically generated by the [OpenAPI Generator](https://openapi-generator.tech) project. - SDK version: 1.0.0 -- Generator version: 7.14.0-SNAPSHOT +- Generator version: 7.14.0 - Build package: org.openapitools.codegen.languages.CSharpClientCodegen diff --git a/samples/client/petstore/csharp/httpclient/net9/Petstore/.openapi-generator/FILES b/samples/client/petstore/csharp/httpclient/net9/Petstore/.openapi-generator/FILES index 5885f8c71756..bb6c1df27119 100644 --- a/samples/client/petstore/csharp/httpclient/net9/Petstore/.openapi-generator/FILES +++ b/samples/client/petstore/csharp/httpclient/net9/Petstore/.openapi-generator/FILES @@ -107,6 +107,7 @@ docs/TestResult.md docs/TestResultCode.md docs/Triangle.md docs/TriangleInterface.md +docs/UploadFiles200Response.md docs/User.md docs/UserApi.md docs/Whale.md @@ -114,6 +115,7 @@ docs/Zebra.md docs/ZeroBasedEnum.md docs/ZeroBasedEnumClass.md git_push.sh +src/Org.OpenAPITools.Test/Model/UploadFiles200ResponseTests.cs src/Org.OpenAPITools.Test/Org.OpenAPITools.Test.csproj src/Org.OpenAPITools/Api/AnotherFakeApi.cs src/Org.OpenAPITools/Api/DefaultApi.cs @@ -239,6 +241,7 @@ src/Org.OpenAPITools/Model/TestResult.cs src/Org.OpenAPITools/Model/TestResultCode.cs src/Org.OpenAPITools/Model/Triangle.cs src/Org.OpenAPITools/Model/TriangleInterface.cs +src/Org.OpenAPITools/Model/UploadFiles200Response.cs src/Org.OpenAPITools/Model/User.cs src/Org.OpenAPITools/Model/Whale.cs src/Org.OpenAPITools/Model/Zebra.cs diff --git a/samples/client/petstore/csharp/httpclient/net9/Petstore/.openapi-generator/VERSION b/samples/client/petstore/csharp/httpclient/net9/Petstore/.openapi-generator/VERSION index 4c631cf217a2..e465da43155f 100644 --- a/samples/client/petstore/csharp/httpclient/net9/Petstore/.openapi-generator/VERSION +++ b/samples/client/petstore/csharp/httpclient/net9/Petstore/.openapi-generator/VERSION @@ -1 +1 @@ -7.14.0-SNAPSHOT +7.14.0 diff --git a/samples/client/petstore/csharp/httpclient/net9/Petstore/README.md b/samples/client/petstore/csharp/httpclient/net9/Petstore/README.md index 0cd660848be2..2694473c5141 100644 --- a/samples/client/petstore/csharp/httpclient/net9/Petstore/README.md +++ b/samples/client/petstore/csharp/httpclient/net9/Petstore/README.md @@ -6,7 +6,7 @@ This C# SDK is automatically generated by the [OpenAPI Generator](https://openap - API version: 1.0.0 - SDK version: 1.0.0 -- Generator version: 7.14.0-SNAPSHOT +- Generator version: 7.14.0 - Build package: org.openapitools.codegen.languages.CSharpClientCodegen @@ -147,6 +147,7 @@ Class | Method | HTTP request | Description *DefaultApi* | [**Hello**](docs/DefaultApi.md#hello) | **GET** /hello | Hello *DefaultApi* | [**RolesReportGet**](docs/DefaultApi.md#rolesreportget) | **GET** /roles/report | *DefaultApi* | [**Test**](docs/DefaultApi.md#test) | **GET** /test | Retrieve an existing Notificationtest's Elements +*DefaultApi* | [**UploadFiles**](docs/DefaultApi.md#uploadfiles) | **POST** /upload | Upload multiple files *FakeApi* | [**FakeHealthGet**](docs/FakeApi.md#fakehealthget) | **GET** /fake/health | Health check endpoint *FakeApi* | [**FakeOuterBooleanSerialize**](docs/FakeApi.md#fakeouterbooleanserialize) | **POST** /fake/outer/boolean | *FakeApi* | [**FakeOuterCompositeSerialize**](docs/FakeApi.md#fakeoutercompositeserialize) | **POST** /fake/outer/composite | @@ -292,6 +293,7 @@ Class | Method | HTTP request | Description - [Model.TestResultCode](docs/TestResultCode.md) - [Model.Triangle](docs/Triangle.md) - [Model.TriangleInterface](docs/TriangleInterface.md) + - [Model.UploadFiles200Response](docs/UploadFiles200Response.md) - [Model.User](docs/User.md) - [Model.Whale](docs/Whale.md) - [Model.Zebra](docs/Zebra.md) diff --git a/samples/client/petstore/csharp/httpclient/net9/Petstore/api/openapi.yaml b/samples/client/petstore/csharp/httpclient/net9/Petstore/api/openapi.yaml index d86a1d2f6d87..276850a46bc1 100644 --- a/samples/client/petstore/csharp/httpclient/net9/Petstore/api/openapi.yaml +++ b/samples/client/petstore/csharp/httpclient/net9/Petstore/api/openapi.yaml @@ -41,6 +41,23 @@ tags: - description: Operations about user name: user paths: + /upload: + post: + operationId: uploadFiles + requestBody: + content: + multipart/form-data: + schema: + $ref: "#/components/schemas/uploadFiles_request" + required: true + responses: + "200": + content: + application/json: + schema: + $ref: "#/components/schemas/uploadFiles_200_response" + description: Files uploaded successfully + summary: Upload multiple files /roles/report: get: responses: @@ -2865,6 +2882,26 @@ components: - APPROVED - MANUAL_APPROVAL_REQUIRED type: string + uploadFiles_request: + properties: + files: + items: + format: binary + type: string + type: array + required: + - files + type: object + uploadFiles_200_response: + example: + message: message + fileCount: 0 + properties: + message: + type: string + fileCount: + type: integer + type: object _foo_get_default_response: example: string: diff --git a/samples/client/petstore/csharp/httpclient/net9/Petstore/docs/DefaultApi.md b/samples/client/petstore/csharp/httpclient/net9/Petstore/docs/DefaultApi.md index 13db7cec8ee1..92dda4cb645a 100644 --- a/samples/client/petstore/csharp/httpclient/net9/Petstore/docs/DefaultApi.md +++ b/samples/client/petstore/csharp/httpclient/net9/Petstore/docs/DefaultApi.md @@ -9,6 +9,7 @@ All URIs are relative to *http://petstore.swagger.io:80/v2* | [**Hello**](DefaultApi.md#hello) | **GET** /hello | Hello | | [**RolesReportGet**](DefaultApi.md#rolesreportget) | **GET** /roles/report | | | [**Test**](DefaultApi.md#test) | **GET** /test | Retrieve an existing Notificationtest's Elements | +| [**UploadFiles**](DefaultApi.md#uploadfiles) | **POST** /upload | Upload multiple files | # **FooGet** @@ -447,3 +448,96 @@ No authorization required [[Back to top]](#) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to Model list]](../README.md#documentation-for-models) [[Back to README]](../README.md) + +# **UploadFiles** +> UploadFiles200Response UploadFiles (List files) + +Upload multiple files + +### Example +```csharp +using System.Collections.Generic; +using System.Diagnostics; +using System.Net.Http; +using Org.OpenAPITools.Api; +using Org.OpenAPITools.Client; +using Org.OpenAPITools.Model; + +namespace Example +{ + public class UploadFilesExample + { + public static void Main() + { + Configuration config = new Configuration(); + config.BasePath = "http://petstore.swagger.io:80/v2"; + // create instances of HttpClient, HttpClientHandler to be reused later with different Api classes + HttpClient httpClient = new HttpClient(); + HttpClientHandler httpClientHandler = new HttpClientHandler(); + var apiInstance = new DefaultApi(httpClient, config, httpClientHandler); + var files = new List(); // List | + + try + { + // Upload multiple files + UploadFiles200Response result = apiInstance.UploadFiles(files); + Debug.WriteLine(result); + } + catch (ApiException e) + { + Debug.Print("Exception when calling DefaultApi.UploadFiles: " + e.Message); + Debug.Print("Status Code: " + e.ErrorCode); + Debug.Print(e.StackTrace); + } + } + } +} +``` + +#### Using the UploadFilesWithHttpInfo variant +This returns an ApiResponse object which contains the response data, status code and headers. + +```csharp +try +{ + // Upload multiple files + ApiResponse response = apiInstance.UploadFilesWithHttpInfo(files); + Debug.Write("Status Code: " + response.StatusCode); + Debug.Write("Response Headers: " + response.Headers); + Debug.Write("Response Body: " + response.Data); +} +catch (ApiException e) +{ + Debug.Print("Exception when calling DefaultApi.UploadFilesWithHttpInfo: " + e.Message); + Debug.Print("Status Code: " + e.ErrorCode); + Debug.Print(e.StackTrace); +} +``` + +### Parameters + +| Name | Type | Description | Notes | +|------|------|-------------|-------| +| **files** | **List<FileParameter>** | | | + +### Return type + +[**UploadFiles200Response**](UploadFiles200Response.md) + +### Authorization + +No authorization required + +### HTTP request headers + + - **Content-Type**: multipart/form-data + - **Accept**: application/json + + +### HTTP response details +| Status code | Description | Response headers | +|-------------|-------------|------------------| +| **200** | Files uploaded successfully | - | + +[[Back to top]](#) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to Model list]](../README.md#documentation-for-models) [[Back to README]](../README.md) + diff --git a/samples/client/petstore/csharp/httpclient/net9/Petstore/docs/UploadFiles200Response.md b/samples/client/petstore/csharp/httpclient/net9/Petstore/docs/UploadFiles200Response.md new file mode 100644 index 000000000000..2a214ae867d0 --- /dev/null +++ b/samples/client/petstore/csharp/httpclient/net9/Petstore/docs/UploadFiles200Response.md @@ -0,0 +1,11 @@ +# Org.OpenAPITools.Model.UploadFiles200Response + +## Properties + +Name | Type | Description | Notes +------------ | ------------- | ------------- | ------------- +**Message** | **string** | | [optional] +**FileCount** | **int** | | [optional] + +[[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md) + diff --git a/samples/client/petstore/csharp/httpclient/net9/Petstore/src/Org.OpenAPITools.Test/Model/UploadFiles200ResponseTests.cs b/samples/client/petstore/csharp/httpclient/net9/Petstore/src/Org.OpenAPITools.Test/Model/UploadFiles200ResponseTests.cs new file mode 100644 index 000000000000..c4f1745e6fc5 --- /dev/null +++ b/samples/client/petstore/csharp/httpclient/net9/Petstore/src/Org.OpenAPITools.Test/Model/UploadFiles200ResponseTests.cs @@ -0,0 +1,75 @@ +/* + * OpenAPI Petstore + * + * This spec is mainly for testing Petstore server and contains fake endpoints, models. Please do not use this for any other purpose. Special characters: \" \\ + * + * The version of the OpenAPI document: 1.0.0 + * Generated by: https://github.com/openapitools/openapi-generator.git + */ + + +using Xunit; + +using System; +using System.Linq; +using System.IO; +using System.Collections.Generic; +using Org.OpenAPITools.Model; +using Org.OpenAPITools.Client; +using System.Reflection; +using Newtonsoft.Json; + +namespace Org.OpenAPITools.Test.Model +{ + /// + /// Class for testing UploadFiles200Response + /// + /// + /// This file is automatically generated by OpenAPI Generator (https://openapi-generator.tech). + /// Please update the test case below to test the model. + /// + public class UploadFiles200ResponseTests : IDisposable + { + // TODO uncomment below to declare an instance variable for UploadFiles200Response + //private UploadFiles200Response instance; + + public UploadFiles200ResponseTests() + { + // TODO uncomment below to create an instance of UploadFiles200Response + //instance = new UploadFiles200Response(); + } + + public void Dispose() + { + // Cleanup when everything is done. + } + + /// + /// Test an instance of UploadFiles200Response + /// + [Fact] + public void UploadFiles200ResponseInstanceTest() + { + // TODO uncomment below to test "IsType" UploadFiles200Response + //Assert.IsType(instance); + } + + /// + /// Test the property 'Message' + /// + [Fact] + public void MessageTest() + { + // TODO unit test for the property 'Message' + } + + /// + /// Test the property 'FileCount' + /// + [Fact] + public void FileCountTest() + { + // TODO unit test for the property 'FileCount' + } + } +} diff --git a/samples/client/petstore/csharp/httpclient/net9/Petstore/src/Org.OpenAPITools/Api/DefaultApi.cs b/samples/client/petstore/csharp/httpclient/net9/Petstore/src/Org.OpenAPITools/Api/DefaultApi.cs index 00b6dcfecfea..fb4605b52a9b 100644 --- a/samples/client/petstore/csharp/httpclient/net9/Petstore/src/Org.OpenAPITools/Api/DefaultApi.cs +++ b/samples/client/petstore/csharp/httpclient/net9/Petstore/src/Org.OpenAPITools/Api/DefaultApi.cs @@ -112,6 +112,24 @@ public interface IDefaultApiSync : IApiAccessor /// Thrown when fails to make API call /// ApiResponse of NotificationtestGetElementsV1ResponseMPayload ApiResponse TestWithHttpInfo(); + /// + /// Upload multiple files + /// + /// Thrown when fails to make API call + /// + /// UploadFiles200Response + UploadFiles200Response UploadFiles(List files); + + /// + /// Upload multiple files + /// + /// + /// + /// + /// Thrown when fails to make API call + /// + /// ApiResponse of UploadFiles200Response + ApiResponse UploadFilesWithHttpInfo(List files); #endregion Synchronous Operations } @@ -228,6 +246,29 @@ public interface IDefaultApiAsync : IApiAccessor /// Cancellation Token to cancel the request. /// Task of ApiResponse (NotificationtestGetElementsV1ResponseMPayload) System.Threading.Tasks.Task> TestWithHttpInfoAsync(System.Threading.CancellationToken cancellationToken = default); + /// + /// Upload multiple files + /// + /// + /// + /// + /// Thrown when fails to make API call + /// + /// Cancellation Token to cancel the request. + /// Task of UploadFiles200Response + System.Threading.Tasks.Task UploadFilesAsync(List files, System.Threading.CancellationToken cancellationToken = default); + + /// + /// Upload multiple files + /// + /// + /// + /// + /// Thrown when fails to make API call + /// + /// Cancellation Token to cancel the request. + /// Task of ApiResponse (UploadFiles200Response) + System.Threading.Tasks.Task> UploadFilesWithHttpInfoAsync(List files, System.Threading.CancellationToken cancellationToken = default); #endregion Asynchronous Operations } @@ -958,5 +999,122 @@ public async System.Threading.Tasks.Task + /// Upload multiple files + /// + /// Thrown when fails to make API call + /// + /// UploadFiles200Response + public UploadFiles200Response UploadFiles(List files) + { + Org.OpenAPITools.Client.ApiResponse localVarResponse = UploadFilesWithHttpInfo(files); + return localVarResponse.Data; + } + + /// + /// Upload multiple files + /// + /// Thrown when fails to make API call + /// + /// ApiResponse of UploadFiles200Response + public Org.OpenAPITools.Client.ApiResponse UploadFilesWithHttpInfo(List files) + { + // verify the required parameter 'files' is set + if (files == null) + throw new Org.OpenAPITools.Client.ApiException(400, "Missing required parameter 'files' when calling DefaultApi->UploadFiles"); + + Org.OpenAPITools.Client.RequestOptions localVarRequestOptions = new Org.OpenAPITools.Client.RequestOptions(); + + string[] _contentTypes = new string[] { + "multipart/form-data" + }; + + // to determine the Accept header + string[] _accepts = new string[] { + "application/json" + }; + + var localVarContentType = Org.OpenAPITools.Client.ClientUtils.SelectHeaderContentType(_contentTypes); + if (localVarContentType != null) localVarRequestOptions.HeaderParameters.Add("Content-Type", localVarContentType); + + var localVarAccept = Org.OpenAPITools.Client.ClientUtils.SelectHeaderAccept(_accepts); + if (localVarAccept != null) localVarRequestOptions.HeaderParameters.Add("Accept", localVarAccept); + + localVarRequestOptions.FileParameters.Add("files", files); + + + // make the HTTP request + var localVarResponse = this.Client.Post("/upload", localVarRequestOptions, this.Configuration); + + if (this.ExceptionFactory != null) + { + Exception _exception = this.ExceptionFactory("UploadFiles", localVarResponse); + if (_exception != null) throw _exception; + } + + return localVarResponse; + } + + /// + /// Upload multiple files + /// + /// Thrown when fails to make API call + /// + /// Cancellation Token to cancel the request. + /// Task of UploadFiles200Response + public async System.Threading.Tasks.Task UploadFilesAsync(List files, System.Threading.CancellationToken cancellationToken = default) + { + Org.OpenAPITools.Client.ApiResponse localVarResponse = await UploadFilesWithHttpInfoAsync(files, cancellationToken).ConfigureAwait(false); + return localVarResponse.Data; + } + + /// + /// Upload multiple files + /// + /// Thrown when fails to make API call + /// + /// Cancellation Token to cancel the request. + /// Task of ApiResponse (UploadFiles200Response) + public async System.Threading.Tasks.Task> UploadFilesWithHttpInfoAsync(List files, System.Threading.CancellationToken cancellationToken = default) + { + // verify the required parameter 'files' is set + if (files == null) + throw new Org.OpenAPITools.Client.ApiException(400, "Missing required parameter 'files' when calling DefaultApi->UploadFiles"); + + + Org.OpenAPITools.Client.RequestOptions localVarRequestOptions = new Org.OpenAPITools.Client.RequestOptions(); + + string[] _contentTypes = new string[] { + "multipart/form-data" + }; + + // to determine the Accept header + string[] _accepts = new string[] { + "application/json" + }; + + + var localVarContentType = Org.OpenAPITools.Client.ClientUtils.SelectHeaderContentType(_contentTypes); + if (localVarContentType != null) localVarRequestOptions.HeaderParameters.Add("Content-Type", localVarContentType); + + var localVarAccept = Org.OpenAPITools.Client.ClientUtils.SelectHeaderAccept(_accepts); + if (localVarAccept != null) localVarRequestOptions.HeaderParameters.Add("Accept", localVarAccept); + + localVarRequestOptions.FileParameters.Add("files", files); + + + // make the HTTP request + + var localVarResponse = await this.AsynchronousClient.PostAsync("/upload", localVarRequestOptions, this.Configuration, cancellationToken).ConfigureAwait(false); + + if (this.ExceptionFactory != null) + { + Exception _exception = this.ExceptionFactory("UploadFiles", localVarResponse); + if (_exception != null) throw _exception; + } + + return localVarResponse; + } + } } diff --git a/samples/client/petstore/csharp/httpclient/net9/Petstore/src/Org.OpenAPITools/Model/UploadFiles200Response.cs b/samples/client/petstore/csharp/httpclient/net9/Petstore/src/Org.OpenAPITools/Model/UploadFiles200Response.cs new file mode 100644 index 000000000000..f38756313b22 --- /dev/null +++ b/samples/client/petstore/csharp/httpclient/net9/Petstore/src/Org.OpenAPITools/Model/UploadFiles200Response.cs @@ -0,0 +1,143 @@ +/* + * OpenAPI Petstore + * + * This spec is mainly for testing Petstore server and contains fake endpoints, models. Please do not use this for any other purpose. Special characters: \" \\ + * + * The version of the OpenAPI document: 1.0.0 + * Generated by: https://github.com/openapitools/openapi-generator.git + */ + + +using System; +using System.Collections; +using System.Collections.Generic; +using System.Collections.ObjectModel; +using System.Linq; +using System.IO; +using System.Runtime.Serialization; +using System.Text; +using System.Text.RegularExpressions; +using Newtonsoft.Json; +using Newtonsoft.Json.Converters; +using Newtonsoft.Json.Linq; +using System.ComponentModel.DataAnnotations; +using FileParameter = Org.OpenAPITools.Client.FileParameter; +using OpenAPIDateConverter = Org.OpenAPITools.Client.OpenAPIDateConverter; +using OpenAPIClientUtils = Org.OpenAPITools.Client.ClientUtils; + +namespace Org.OpenAPITools.Model +{ + /// + /// UploadFiles200Response + /// + [DataContract(Name = "uploadFiles_200_response")] + public partial class UploadFiles200Response : IEquatable, IValidatableObject + { + /// + /// Initializes a new instance of the class. + /// + /// message. + /// fileCount. + public UploadFiles200Response(string message = default, int fileCount = default) + { + this.Message = message; + this.FileCount = fileCount; + this.AdditionalProperties = new Dictionary(); + } + + /// + /// Gets or Sets Message + /// + [DataMember(Name = "message", EmitDefaultValue = false)] + public string Message { get; set; } + + /// + /// Gets or Sets FileCount + /// + [DataMember(Name = "fileCount", EmitDefaultValue = false)] + public int FileCount { get; set; } + + /// + /// Gets or Sets additional properties + /// + [JsonExtensionData] + public IDictionary AdditionalProperties { get; set; } + + /// + /// Returns the string presentation of the object + /// + /// String presentation of the object + public override string ToString() + { + StringBuilder sb = new StringBuilder(); + sb.Append("class UploadFiles200Response {\n"); + sb.Append(" Message: ").Append(Message).Append("\n"); + sb.Append(" FileCount: ").Append(FileCount).Append("\n"); + sb.Append(" AdditionalProperties: ").Append(AdditionalProperties).Append("\n"); + sb.Append("}\n"); + return sb.ToString(); + } + + /// + /// Returns the JSON string presentation of the object + /// + /// JSON string presentation of the object + public virtual string ToJson() + { + return Newtonsoft.Json.JsonConvert.SerializeObject(this, Newtonsoft.Json.Formatting.Indented); + } + + /// + /// Returns true if objects are equal + /// + /// Object to be compared + /// Boolean + public override bool Equals(object input) + { + return OpenAPIClientUtils.compareLogic.Compare(this, input as UploadFiles200Response).AreEqual; + } + + /// + /// Returns true if UploadFiles200Response instances are equal + /// + /// Instance of UploadFiles200Response to be compared + /// Boolean + public bool Equals(UploadFiles200Response input) + { + return OpenAPIClientUtils.compareLogic.Compare(this, input).AreEqual; + } + + /// + /// Gets the hash code + /// + /// Hash code + public override int GetHashCode() + { + unchecked // Overflow is fine, just wrap + { + int hashCode = 41; + if (this.Message != null) + { + hashCode = (hashCode * 59) + this.Message.GetHashCode(); + } + hashCode = (hashCode * 59) + this.FileCount.GetHashCode(); + if (this.AdditionalProperties != null) + { + hashCode = (hashCode * 59) + this.AdditionalProperties.GetHashCode(); + } + return hashCode; + } + } + + /// + /// To validate all properties of the instance + /// + /// Validation context + /// Validation Result + IEnumerable IValidatableObject.Validate(ValidationContext validationContext) + { + yield break; + } + } + +} diff --git a/samples/client/petstore/csharp/httpclient/standard2.0/Petstore/.openapi-generator/FILES b/samples/client/petstore/csharp/httpclient/standard2.0/Petstore/.openapi-generator/FILES index 8fc05aa72028..4bd881bdf469 100644 --- a/samples/client/petstore/csharp/httpclient/standard2.0/Petstore/.openapi-generator/FILES +++ b/samples/client/petstore/csharp/httpclient/standard2.0/Petstore/.openapi-generator/FILES @@ -107,6 +107,7 @@ docs/TestResult.md docs/TestResultCode.md docs/Triangle.md docs/TriangleInterface.md +docs/UploadFiles200Response.md docs/User.md docs/UserApi.md docs/Whale.md @@ -114,6 +115,7 @@ docs/Zebra.md docs/ZeroBasedEnum.md docs/ZeroBasedEnumClass.md git_push.sh +src/Org.OpenAPITools.Test/Model/UploadFiles200ResponseTests.cs src/Org.OpenAPITools/Api/AnotherFakeApi.cs src/Org.OpenAPITools/Api/DefaultApi.cs src/Org.OpenAPITools/Api/FakeApi.cs @@ -238,6 +240,7 @@ src/Org.OpenAPITools/Model/TestResult.cs src/Org.OpenAPITools/Model/TestResultCode.cs src/Org.OpenAPITools/Model/Triangle.cs src/Org.OpenAPITools/Model/TriangleInterface.cs +src/Org.OpenAPITools/Model/UploadFiles200Response.cs src/Org.OpenAPITools/Model/User.cs src/Org.OpenAPITools/Model/Whale.cs src/Org.OpenAPITools/Model/Zebra.cs diff --git a/samples/client/petstore/csharp/httpclient/standard2.0/Petstore/.openapi-generator/VERSION b/samples/client/petstore/csharp/httpclient/standard2.0/Petstore/.openapi-generator/VERSION index 4c631cf217a2..e465da43155f 100644 --- a/samples/client/petstore/csharp/httpclient/standard2.0/Petstore/.openapi-generator/VERSION +++ b/samples/client/petstore/csharp/httpclient/standard2.0/Petstore/.openapi-generator/VERSION @@ -1 +1 @@ -7.14.0-SNAPSHOT +7.14.0 diff --git a/samples/client/petstore/csharp/httpclient/standard2.0/Petstore/README.md b/samples/client/petstore/csharp/httpclient/standard2.0/Petstore/README.md index 18511c95bd16..6f224deb7f61 100644 --- a/samples/client/petstore/csharp/httpclient/standard2.0/Petstore/README.md +++ b/samples/client/petstore/csharp/httpclient/standard2.0/Petstore/README.md @@ -6,7 +6,7 @@ This C# SDK is automatically generated by the [OpenAPI Generator](https://openap - API version: 1.0.0 - SDK version: 1.0.0 -- Generator version: 7.14.0-SNAPSHOT +- Generator version: 7.14.0 - Build package: org.openapitools.codegen.languages.CSharpClientCodegen @@ -135,6 +135,7 @@ Class | Method | HTTP request | Description *DefaultApi* | [**Hello**](docs/DefaultApi.md#hello) | **GET** /hello | Hello *DefaultApi* | [**RolesReportGet**](docs/DefaultApi.md#rolesreportget) | **GET** /roles/report | *DefaultApi* | [**Test**](docs/DefaultApi.md#test) | **GET** /test | Retrieve an existing Notificationtest's Elements +*DefaultApi* | [**UploadFiles**](docs/DefaultApi.md#uploadfiles) | **POST** /upload | Upload multiple files *FakeApi* | [**FakeHealthGet**](docs/FakeApi.md#fakehealthget) | **GET** /fake/health | Health check endpoint *FakeApi* | [**FakeOuterBooleanSerialize**](docs/FakeApi.md#fakeouterbooleanserialize) | **POST** /fake/outer/boolean | *FakeApi* | [**FakeOuterCompositeSerialize**](docs/FakeApi.md#fakeoutercompositeserialize) | **POST** /fake/outer/composite | @@ -280,6 +281,7 @@ Class | Method | HTTP request | Description - [Model.TestResultCode](docs/TestResultCode.md) - [Model.Triangle](docs/Triangle.md) - [Model.TriangleInterface](docs/TriangleInterface.md) + - [Model.UploadFiles200Response](docs/UploadFiles200Response.md) - [Model.User](docs/User.md) - [Model.Whale](docs/Whale.md) - [Model.Zebra](docs/Zebra.md) diff --git a/samples/client/petstore/csharp/httpclient/standard2.0/Petstore/api/openapi.yaml b/samples/client/petstore/csharp/httpclient/standard2.0/Petstore/api/openapi.yaml index d86a1d2f6d87..276850a46bc1 100644 --- a/samples/client/petstore/csharp/httpclient/standard2.0/Petstore/api/openapi.yaml +++ b/samples/client/petstore/csharp/httpclient/standard2.0/Petstore/api/openapi.yaml @@ -41,6 +41,23 @@ tags: - description: Operations about user name: user paths: + /upload: + post: + operationId: uploadFiles + requestBody: + content: + multipart/form-data: + schema: + $ref: "#/components/schemas/uploadFiles_request" + required: true + responses: + "200": + content: + application/json: + schema: + $ref: "#/components/schemas/uploadFiles_200_response" + description: Files uploaded successfully + summary: Upload multiple files /roles/report: get: responses: @@ -2865,6 +2882,26 @@ components: - APPROVED - MANUAL_APPROVAL_REQUIRED type: string + uploadFiles_request: + properties: + files: + items: + format: binary + type: string + type: array + required: + - files + type: object + uploadFiles_200_response: + example: + message: message + fileCount: 0 + properties: + message: + type: string + fileCount: + type: integer + type: object _foo_get_default_response: example: string: diff --git a/samples/client/petstore/csharp/httpclient/standard2.0/Petstore/docs/DefaultApi.md b/samples/client/petstore/csharp/httpclient/standard2.0/Petstore/docs/DefaultApi.md index 13db7cec8ee1..92dda4cb645a 100644 --- a/samples/client/petstore/csharp/httpclient/standard2.0/Petstore/docs/DefaultApi.md +++ b/samples/client/petstore/csharp/httpclient/standard2.0/Petstore/docs/DefaultApi.md @@ -9,6 +9,7 @@ All URIs are relative to *http://petstore.swagger.io:80/v2* | [**Hello**](DefaultApi.md#hello) | **GET** /hello | Hello | | [**RolesReportGet**](DefaultApi.md#rolesreportget) | **GET** /roles/report | | | [**Test**](DefaultApi.md#test) | **GET** /test | Retrieve an existing Notificationtest's Elements | +| [**UploadFiles**](DefaultApi.md#uploadfiles) | **POST** /upload | Upload multiple files | # **FooGet** @@ -447,3 +448,96 @@ No authorization required [[Back to top]](#) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to Model list]](../README.md#documentation-for-models) [[Back to README]](../README.md) + +# **UploadFiles** +> UploadFiles200Response UploadFiles (List files) + +Upload multiple files + +### Example +```csharp +using System.Collections.Generic; +using System.Diagnostics; +using System.Net.Http; +using Org.OpenAPITools.Api; +using Org.OpenAPITools.Client; +using Org.OpenAPITools.Model; + +namespace Example +{ + public class UploadFilesExample + { + public static void Main() + { + Configuration config = new Configuration(); + config.BasePath = "http://petstore.swagger.io:80/v2"; + // create instances of HttpClient, HttpClientHandler to be reused later with different Api classes + HttpClient httpClient = new HttpClient(); + HttpClientHandler httpClientHandler = new HttpClientHandler(); + var apiInstance = new DefaultApi(httpClient, config, httpClientHandler); + var files = new List(); // List | + + try + { + // Upload multiple files + UploadFiles200Response result = apiInstance.UploadFiles(files); + Debug.WriteLine(result); + } + catch (ApiException e) + { + Debug.Print("Exception when calling DefaultApi.UploadFiles: " + e.Message); + Debug.Print("Status Code: " + e.ErrorCode); + Debug.Print(e.StackTrace); + } + } + } +} +``` + +#### Using the UploadFilesWithHttpInfo variant +This returns an ApiResponse object which contains the response data, status code and headers. + +```csharp +try +{ + // Upload multiple files + ApiResponse response = apiInstance.UploadFilesWithHttpInfo(files); + Debug.Write("Status Code: " + response.StatusCode); + Debug.Write("Response Headers: " + response.Headers); + Debug.Write("Response Body: " + response.Data); +} +catch (ApiException e) +{ + Debug.Print("Exception when calling DefaultApi.UploadFilesWithHttpInfo: " + e.Message); + Debug.Print("Status Code: " + e.ErrorCode); + Debug.Print(e.StackTrace); +} +``` + +### Parameters + +| Name | Type | Description | Notes | +|------|------|-------------|-------| +| **files** | **List<FileParameter>** | | | + +### Return type + +[**UploadFiles200Response**](UploadFiles200Response.md) + +### Authorization + +No authorization required + +### HTTP request headers + + - **Content-Type**: multipart/form-data + - **Accept**: application/json + + +### HTTP response details +| Status code | Description | Response headers | +|-------------|-------------|------------------| +| **200** | Files uploaded successfully | - | + +[[Back to top]](#) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to Model list]](../README.md#documentation-for-models) [[Back to README]](../README.md) + diff --git a/samples/client/petstore/csharp/httpclient/standard2.0/Petstore/docs/UploadFiles200Response.md b/samples/client/petstore/csharp/httpclient/standard2.0/Petstore/docs/UploadFiles200Response.md new file mode 100644 index 000000000000..2a214ae867d0 --- /dev/null +++ b/samples/client/petstore/csharp/httpclient/standard2.0/Petstore/docs/UploadFiles200Response.md @@ -0,0 +1,11 @@ +# Org.OpenAPITools.Model.UploadFiles200Response + +## Properties + +Name | Type | Description | Notes +------------ | ------------- | ------------- | ------------- +**Message** | **string** | | [optional] +**FileCount** | **int** | | [optional] + +[[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md) + diff --git a/samples/client/petstore/csharp/httpclient/standard2.0/Petstore/src/Org.OpenAPITools.Test/Model/UploadFiles200ResponseTests.cs b/samples/client/petstore/csharp/httpclient/standard2.0/Petstore/src/Org.OpenAPITools.Test/Model/UploadFiles200ResponseTests.cs new file mode 100644 index 000000000000..c4f1745e6fc5 --- /dev/null +++ b/samples/client/petstore/csharp/httpclient/standard2.0/Petstore/src/Org.OpenAPITools.Test/Model/UploadFiles200ResponseTests.cs @@ -0,0 +1,75 @@ +/* + * OpenAPI Petstore + * + * This spec is mainly for testing Petstore server and contains fake endpoints, models. Please do not use this for any other purpose. Special characters: \" \\ + * + * The version of the OpenAPI document: 1.0.0 + * Generated by: https://github.com/openapitools/openapi-generator.git + */ + + +using Xunit; + +using System; +using System.Linq; +using System.IO; +using System.Collections.Generic; +using Org.OpenAPITools.Model; +using Org.OpenAPITools.Client; +using System.Reflection; +using Newtonsoft.Json; + +namespace Org.OpenAPITools.Test.Model +{ + /// + /// Class for testing UploadFiles200Response + /// + /// + /// This file is automatically generated by OpenAPI Generator (https://openapi-generator.tech). + /// Please update the test case below to test the model. + /// + public class UploadFiles200ResponseTests : IDisposable + { + // TODO uncomment below to declare an instance variable for UploadFiles200Response + //private UploadFiles200Response instance; + + public UploadFiles200ResponseTests() + { + // TODO uncomment below to create an instance of UploadFiles200Response + //instance = new UploadFiles200Response(); + } + + public void Dispose() + { + // Cleanup when everything is done. + } + + /// + /// Test an instance of UploadFiles200Response + /// + [Fact] + public void UploadFiles200ResponseInstanceTest() + { + // TODO uncomment below to test "IsType" UploadFiles200Response + //Assert.IsType(instance); + } + + /// + /// Test the property 'Message' + /// + [Fact] + public void MessageTest() + { + // TODO unit test for the property 'Message' + } + + /// + /// Test the property 'FileCount' + /// + [Fact] + public void FileCountTest() + { + // TODO unit test for the property 'FileCount' + } + } +} diff --git a/samples/client/petstore/csharp/httpclient/standard2.0/Petstore/src/Org.OpenAPITools/Api/DefaultApi.cs b/samples/client/petstore/csharp/httpclient/standard2.0/Petstore/src/Org.OpenAPITools/Api/DefaultApi.cs index 00b6dcfecfea..fb4605b52a9b 100644 --- a/samples/client/petstore/csharp/httpclient/standard2.0/Petstore/src/Org.OpenAPITools/Api/DefaultApi.cs +++ b/samples/client/petstore/csharp/httpclient/standard2.0/Petstore/src/Org.OpenAPITools/Api/DefaultApi.cs @@ -112,6 +112,24 @@ public interface IDefaultApiSync : IApiAccessor /// Thrown when fails to make API call /// ApiResponse of NotificationtestGetElementsV1ResponseMPayload ApiResponse TestWithHttpInfo(); + /// + /// Upload multiple files + /// + /// Thrown when fails to make API call + /// + /// UploadFiles200Response + UploadFiles200Response UploadFiles(List files); + + /// + /// Upload multiple files + /// + /// + /// + /// + /// Thrown when fails to make API call + /// + /// ApiResponse of UploadFiles200Response + ApiResponse UploadFilesWithHttpInfo(List files); #endregion Synchronous Operations } @@ -228,6 +246,29 @@ public interface IDefaultApiAsync : IApiAccessor /// Cancellation Token to cancel the request. /// Task of ApiResponse (NotificationtestGetElementsV1ResponseMPayload) System.Threading.Tasks.Task> TestWithHttpInfoAsync(System.Threading.CancellationToken cancellationToken = default); + /// + /// Upload multiple files + /// + /// + /// + /// + /// Thrown when fails to make API call + /// + /// Cancellation Token to cancel the request. + /// Task of UploadFiles200Response + System.Threading.Tasks.Task UploadFilesAsync(List files, System.Threading.CancellationToken cancellationToken = default); + + /// + /// Upload multiple files + /// + /// + /// + /// + /// Thrown when fails to make API call + /// + /// Cancellation Token to cancel the request. + /// Task of ApiResponse (UploadFiles200Response) + System.Threading.Tasks.Task> UploadFilesWithHttpInfoAsync(List files, System.Threading.CancellationToken cancellationToken = default); #endregion Asynchronous Operations } @@ -958,5 +999,122 @@ public async System.Threading.Tasks.Task + /// Upload multiple files + /// + /// Thrown when fails to make API call + /// + /// UploadFiles200Response + public UploadFiles200Response UploadFiles(List files) + { + Org.OpenAPITools.Client.ApiResponse localVarResponse = UploadFilesWithHttpInfo(files); + return localVarResponse.Data; + } + + /// + /// Upload multiple files + /// + /// Thrown when fails to make API call + /// + /// ApiResponse of UploadFiles200Response + public Org.OpenAPITools.Client.ApiResponse UploadFilesWithHttpInfo(List files) + { + // verify the required parameter 'files' is set + if (files == null) + throw new Org.OpenAPITools.Client.ApiException(400, "Missing required parameter 'files' when calling DefaultApi->UploadFiles"); + + Org.OpenAPITools.Client.RequestOptions localVarRequestOptions = new Org.OpenAPITools.Client.RequestOptions(); + + string[] _contentTypes = new string[] { + "multipart/form-data" + }; + + // to determine the Accept header + string[] _accepts = new string[] { + "application/json" + }; + + var localVarContentType = Org.OpenAPITools.Client.ClientUtils.SelectHeaderContentType(_contentTypes); + if (localVarContentType != null) localVarRequestOptions.HeaderParameters.Add("Content-Type", localVarContentType); + + var localVarAccept = Org.OpenAPITools.Client.ClientUtils.SelectHeaderAccept(_accepts); + if (localVarAccept != null) localVarRequestOptions.HeaderParameters.Add("Accept", localVarAccept); + + localVarRequestOptions.FileParameters.Add("files", files); + + + // make the HTTP request + var localVarResponse = this.Client.Post("/upload", localVarRequestOptions, this.Configuration); + + if (this.ExceptionFactory != null) + { + Exception _exception = this.ExceptionFactory("UploadFiles", localVarResponse); + if (_exception != null) throw _exception; + } + + return localVarResponse; + } + + /// + /// Upload multiple files + /// + /// Thrown when fails to make API call + /// + /// Cancellation Token to cancel the request. + /// Task of UploadFiles200Response + public async System.Threading.Tasks.Task UploadFilesAsync(List files, System.Threading.CancellationToken cancellationToken = default) + { + Org.OpenAPITools.Client.ApiResponse localVarResponse = await UploadFilesWithHttpInfoAsync(files, cancellationToken).ConfigureAwait(false); + return localVarResponse.Data; + } + + /// + /// Upload multiple files + /// + /// Thrown when fails to make API call + /// + /// Cancellation Token to cancel the request. + /// Task of ApiResponse (UploadFiles200Response) + public async System.Threading.Tasks.Task> UploadFilesWithHttpInfoAsync(List files, System.Threading.CancellationToken cancellationToken = default) + { + // verify the required parameter 'files' is set + if (files == null) + throw new Org.OpenAPITools.Client.ApiException(400, "Missing required parameter 'files' when calling DefaultApi->UploadFiles"); + + + Org.OpenAPITools.Client.RequestOptions localVarRequestOptions = new Org.OpenAPITools.Client.RequestOptions(); + + string[] _contentTypes = new string[] { + "multipart/form-data" + }; + + // to determine the Accept header + string[] _accepts = new string[] { + "application/json" + }; + + + var localVarContentType = Org.OpenAPITools.Client.ClientUtils.SelectHeaderContentType(_contentTypes); + if (localVarContentType != null) localVarRequestOptions.HeaderParameters.Add("Content-Type", localVarContentType); + + var localVarAccept = Org.OpenAPITools.Client.ClientUtils.SelectHeaderAccept(_accepts); + if (localVarAccept != null) localVarRequestOptions.HeaderParameters.Add("Accept", localVarAccept); + + localVarRequestOptions.FileParameters.Add("files", files); + + + // make the HTTP request + + var localVarResponse = await this.AsynchronousClient.PostAsync("/upload", localVarRequestOptions, this.Configuration, cancellationToken).ConfigureAwait(false); + + if (this.ExceptionFactory != null) + { + Exception _exception = this.ExceptionFactory("UploadFiles", localVarResponse); + if (_exception != null) throw _exception; + } + + return localVarResponse; + } + } } diff --git a/samples/client/petstore/csharp/httpclient/standard2.0/Petstore/src/Org.OpenAPITools/Model/UploadFiles200Response.cs b/samples/client/petstore/csharp/httpclient/standard2.0/Petstore/src/Org.OpenAPITools/Model/UploadFiles200Response.cs new file mode 100644 index 000000000000..f38756313b22 --- /dev/null +++ b/samples/client/petstore/csharp/httpclient/standard2.0/Petstore/src/Org.OpenAPITools/Model/UploadFiles200Response.cs @@ -0,0 +1,143 @@ +/* + * OpenAPI Petstore + * + * This spec is mainly for testing Petstore server and contains fake endpoints, models. Please do not use this for any other purpose. Special characters: \" \\ + * + * The version of the OpenAPI document: 1.0.0 + * Generated by: https://github.com/openapitools/openapi-generator.git + */ + + +using System; +using System.Collections; +using System.Collections.Generic; +using System.Collections.ObjectModel; +using System.Linq; +using System.IO; +using System.Runtime.Serialization; +using System.Text; +using System.Text.RegularExpressions; +using Newtonsoft.Json; +using Newtonsoft.Json.Converters; +using Newtonsoft.Json.Linq; +using System.ComponentModel.DataAnnotations; +using FileParameter = Org.OpenAPITools.Client.FileParameter; +using OpenAPIDateConverter = Org.OpenAPITools.Client.OpenAPIDateConverter; +using OpenAPIClientUtils = Org.OpenAPITools.Client.ClientUtils; + +namespace Org.OpenAPITools.Model +{ + /// + /// UploadFiles200Response + /// + [DataContract(Name = "uploadFiles_200_response")] + public partial class UploadFiles200Response : IEquatable, IValidatableObject + { + /// + /// Initializes a new instance of the class. + /// + /// message. + /// fileCount. + public UploadFiles200Response(string message = default, int fileCount = default) + { + this.Message = message; + this.FileCount = fileCount; + this.AdditionalProperties = new Dictionary(); + } + + /// + /// Gets or Sets Message + /// + [DataMember(Name = "message", EmitDefaultValue = false)] + public string Message { get; set; } + + /// + /// Gets or Sets FileCount + /// + [DataMember(Name = "fileCount", EmitDefaultValue = false)] + public int FileCount { get; set; } + + /// + /// Gets or Sets additional properties + /// + [JsonExtensionData] + public IDictionary AdditionalProperties { get; set; } + + /// + /// Returns the string presentation of the object + /// + /// String presentation of the object + public override string ToString() + { + StringBuilder sb = new StringBuilder(); + sb.Append("class UploadFiles200Response {\n"); + sb.Append(" Message: ").Append(Message).Append("\n"); + sb.Append(" FileCount: ").Append(FileCount).Append("\n"); + sb.Append(" AdditionalProperties: ").Append(AdditionalProperties).Append("\n"); + sb.Append("}\n"); + return sb.ToString(); + } + + /// + /// Returns the JSON string presentation of the object + /// + /// JSON string presentation of the object + public virtual string ToJson() + { + return Newtonsoft.Json.JsonConvert.SerializeObject(this, Newtonsoft.Json.Formatting.Indented); + } + + /// + /// Returns true if objects are equal + /// + /// Object to be compared + /// Boolean + public override bool Equals(object input) + { + return OpenAPIClientUtils.compareLogic.Compare(this, input as UploadFiles200Response).AreEqual; + } + + /// + /// Returns true if UploadFiles200Response instances are equal + /// + /// Instance of UploadFiles200Response to be compared + /// Boolean + public bool Equals(UploadFiles200Response input) + { + return OpenAPIClientUtils.compareLogic.Compare(this, input).AreEqual; + } + + /// + /// Gets the hash code + /// + /// Hash code + public override int GetHashCode() + { + unchecked // Overflow is fine, just wrap + { + int hashCode = 41; + if (this.Message != null) + { + hashCode = (hashCode * 59) + this.Message.GetHashCode(); + } + hashCode = (hashCode * 59) + this.FileCount.GetHashCode(); + if (this.AdditionalProperties != null) + { + hashCode = (hashCode * 59) + this.AdditionalProperties.GetHashCode(); + } + return hashCode; + } + } + + /// + /// To validate all properties of the instance + /// + /// Validation context + /// Validation Result + IEnumerable IValidatableObject.Validate(ValidationContext validationContext) + { + yield break; + } + } + +} diff --git a/samples/client/petstore/csharp/restsharp/net4.7/MultipleFrameworks/.openapi-generator/VERSION b/samples/client/petstore/csharp/restsharp/net4.7/MultipleFrameworks/.openapi-generator/VERSION index 4c631cf217a2..e465da43155f 100644 --- a/samples/client/petstore/csharp/restsharp/net4.7/MultipleFrameworks/.openapi-generator/VERSION +++ b/samples/client/petstore/csharp/restsharp/net4.7/MultipleFrameworks/.openapi-generator/VERSION @@ -1 +1 @@ -7.14.0-SNAPSHOT +7.14.0 diff --git a/samples/client/petstore/csharp/restsharp/net4.7/MultipleFrameworks/README.md b/samples/client/petstore/csharp/restsharp/net4.7/MultipleFrameworks/README.md index 8736093e3b77..6daaf7f3f628 100644 --- a/samples/client/petstore/csharp/restsharp/net4.7/MultipleFrameworks/README.md +++ b/samples/client/petstore/csharp/restsharp/net4.7/MultipleFrameworks/README.md @@ -6,7 +6,7 @@ This C# SDK is automatically generated by the [OpenAPI Generator](https://openap - API version: 1.0.0 - SDK version: 1.0.0 -- Generator version: 7.14.0-SNAPSHOT +- Generator version: 7.14.0 - Build package: org.openapitools.codegen.languages.CSharpClientCodegen diff --git a/samples/client/petstore/csharp/restsharp/net4.7/Petstore/.openapi-generator/VERSION b/samples/client/petstore/csharp/restsharp/net4.7/Petstore/.openapi-generator/VERSION index 4c631cf217a2..e465da43155f 100644 --- a/samples/client/petstore/csharp/restsharp/net4.7/Petstore/.openapi-generator/VERSION +++ b/samples/client/petstore/csharp/restsharp/net4.7/Petstore/.openapi-generator/VERSION @@ -1 +1 @@ -7.14.0-SNAPSHOT +7.14.0 diff --git a/samples/client/petstore/csharp/restsharp/net4.7/Petstore/README.md b/samples/client/petstore/csharp/restsharp/net4.7/Petstore/README.md index 374caa13b756..8fb17ce015c2 100644 --- a/samples/client/petstore/csharp/restsharp/net4.7/Petstore/README.md +++ b/samples/client/petstore/csharp/restsharp/net4.7/Petstore/README.md @@ -6,7 +6,7 @@ This C# SDK is automatically generated by the [OpenAPI Generator](https://openap - API version: 1.0.0 - SDK version: 1.0.0 -- Generator version: 7.14.0-SNAPSHOT +- Generator version: 7.14.0 - Build package: org.openapitools.codegen.languages.CSharpClientCodegen diff --git a/samples/client/petstore/csharp/restsharp/net4.8/Petstore/.openapi-generator/VERSION b/samples/client/petstore/csharp/restsharp/net4.8/Petstore/.openapi-generator/VERSION index 4c631cf217a2..e465da43155f 100644 --- a/samples/client/petstore/csharp/restsharp/net4.8/Petstore/.openapi-generator/VERSION +++ b/samples/client/petstore/csharp/restsharp/net4.8/Petstore/.openapi-generator/VERSION @@ -1 +1 @@ -7.14.0-SNAPSHOT +7.14.0 diff --git a/samples/client/petstore/csharp/restsharp/net4.8/Petstore/README.md b/samples/client/petstore/csharp/restsharp/net4.8/Petstore/README.md index 374caa13b756..8fb17ce015c2 100644 --- a/samples/client/petstore/csharp/restsharp/net4.8/Petstore/README.md +++ b/samples/client/petstore/csharp/restsharp/net4.8/Petstore/README.md @@ -6,7 +6,7 @@ This C# SDK is automatically generated by the [OpenAPI Generator](https://openap - API version: 1.0.0 - SDK version: 1.0.0 -- Generator version: 7.14.0-SNAPSHOT +- Generator version: 7.14.0 - Build package: org.openapitools.codegen.languages.CSharpClientCodegen diff --git a/samples/client/petstore/csharp/restsharp/net8/EnumMappings/.openapi-generator/VERSION b/samples/client/petstore/csharp/restsharp/net8/EnumMappings/.openapi-generator/VERSION index 4c631cf217a2..e465da43155f 100644 --- a/samples/client/petstore/csharp/restsharp/net8/EnumMappings/.openapi-generator/VERSION +++ b/samples/client/petstore/csharp/restsharp/net8/EnumMappings/.openapi-generator/VERSION @@ -1 +1 @@ -7.14.0-SNAPSHOT +7.14.0 diff --git a/samples/client/petstore/csharp/restsharp/net8/EnumMappings/README.md b/samples/client/petstore/csharp/restsharp/net8/EnumMappings/README.md index 374caa13b756..8fb17ce015c2 100644 --- a/samples/client/petstore/csharp/restsharp/net8/EnumMappings/README.md +++ b/samples/client/petstore/csharp/restsharp/net8/EnumMappings/README.md @@ -6,7 +6,7 @@ This C# SDK is automatically generated by the [OpenAPI Generator](https://openap - API version: 1.0.0 - SDK version: 1.0.0 -- Generator version: 7.14.0-SNAPSHOT +- Generator version: 7.14.0 - Build package: org.openapitools.codegen.languages.CSharpClientCodegen diff --git a/samples/client/petstore/csharp/restsharp/net8/ParameterMappings/.openapi-generator/VERSION b/samples/client/petstore/csharp/restsharp/net8/ParameterMappings/.openapi-generator/VERSION index 4c631cf217a2..e465da43155f 100644 --- a/samples/client/petstore/csharp/restsharp/net8/ParameterMappings/.openapi-generator/VERSION +++ b/samples/client/petstore/csharp/restsharp/net8/ParameterMappings/.openapi-generator/VERSION @@ -1 +1 @@ -7.14.0-SNAPSHOT +7.14.0 diff --git a/samples/client/petstore/csharp/restsharp/net8/ParameterMappings/README.md b/samples/client/petstore/csharp/restsharp/net8/ParameterMappings/README.md index 8ab565a87298..9dc8ca8fb2d8 100644 --- a/samples/client/petstore/csharp/restsharp/net8/ParameterMappings/README.md +++ b/samples/client/petstore/csharp/restsharp/net8/ParameterMappings/README.md @@ -6,7 +6,7 @@ This C# SDK is automatically generated by the [OpenAPI Generator](https://openap - API version: 1.0.0 - SDK version: 1.0.0 -- Generator version: 7.14.0-SNAPSHOT +- Generator version: 7.14.0 - Build package: org.openapitools.codegen.languages.CSharpClientCodegen diff --git a/samples/client/petstore/csharp/restsharp/net8/Petstore/.openapi-generator/FILES b/samples/client/petstore/csharp/restsharp/net8/Petstore/.openapi-generator/FILES index 0ddde99ff436..75e19e9401c7 100644 --- a/samples/client/petstore/csharp/restsharp/net8/Petstore/.openapi-generator/FILES +++ b/samples/client/petstore/csharp/restsharp/net8/Petstore/.openapi-generator/FILES @@ -107,6 +107,7 @@ docs/TestResult.md docs/TestResultCode.md docs/Triangle.md docs/TriangleInterface.md +docs/UploadFiles200Response.md docs/User.md docs/UserApi.md docs/Whale.md @@ -114,6 +115,7 @@ docs/Zebra.md docs/ZeroBasedEnum.md docs/ZeroBasedEnumClass.md git_push.sh +src/Org.OpenAPITools.Test/Model/UploadFiles200ResponseTests.cs src/Org.OpenAPITools.Test/Org.OpenAPITools.Test.csproj src/Org.OpenAPITools/Api/AnotherFakeApi.cs src/Org.OpenAPITools/Api/DefaultApi.cs @@ -241,6 +243,7 @@ src/Org.OpenAPITools/Model/TestResult.cs src/Org.OpenAPITools/Model/TestResultCode.cs src/Org.OpenAPITools/Model/Triangle.cs src/Org.OpenAPITools/Model/TriangleInterface.cs +src/Org.OpenAPITools/Model/UploadFiles200Response.cs src/Org.OpenAPITools/Model/User.cs src/Org.OpenAPITools/Model/Whale.cs src/Org.OpenAPITools/Model/Zebra.cs diff --git a/samples/client/petstore/csharp/restsharp/net8/Petstore/.openapi-generator/VERSION b/samples/client/petstore/csharp/restsharp/net8/Petstore/.openapi-generator/VERSION index 4c631cf217a2..e465da43155f 100644 --- a/samples/client/petstore/csharp/restsharp/net8/Petstore/.openapi-generator/VERSION +++ b/samples/client/petstore/csharp/restsharp/net8/Petstore/.openapi-generator/VERSION @@ -1 +1 @@ -7.14.0-SNAPSHOT +7.14.0 diff --git a/samples/client/petstore/csharp/restsharp/net8/Petstore/README.md b/samples/client/petstore/csharp/restsharp/net8/Petstore/README.md index bfd756e161f3..d80b968d9087 100644 --- a/samples/client/petstore/csharp/restsharp/net8/Petstore/README.md +++ b/samples/client/petstore/csharp/restsharp/net8/Petstore/README.md @@ -6,7 +6,7 @@ This C# SDK is automatically generated by the [OpenAPI Generator](https://openap - API version: 1.0.0 - SDK version: 1.0.0 -- Generator version: 7.14.0-SNAPSHOT +- Generator version: 7.14.0 - Build package: org.openapitools.codegen.languages.CSharpClientCodegen @@ -122,6 +122,7 @@ Class | Method | HTTP request | Description *DefaultApi* | [**Hello**](docs/DefaultApi.md#hello) | **GET** /hello | Hello *DefaultApi* | [**RolesReportGet**](docs/DefaultApi.md#rolesreportget) | **GET** /roles/report | *DefaultApi* | [**Test**](docs/DefaultApi.md#test) | **GET** /test | Retrieve an existing Notificationtest's Elements +*DefaultApi* | [**UploadFiles**](docs/DefaultApi.md#uploadfiles) | **POST** /upload | Upload multiple files *FakeApi* | [**FakeHealthGet**](docs/FakeApi.md#fakehealthget) | **GET** /fake/health | Health check endpoint *FakeApi* | [**FakeOuterBooleanSerialize**](docs/FakeApi.md#fakeouterbooleanserialize) | **POST** /fake/outer/boolean | *FakeApi* | [**FakeOuterCompositeSerialize**](docs/FakeApi.md#fakeoutercompositeserialize) | **POST** /fake/outer/composite | @@ -267,6 +268,7 @@ Class | Method | HTTP request | Description - [Model.TestResultCode](docs/TestResultCode.md) - [Model.Triangle](docs/Triangle.md) - [Model.TriangleInterface](docs/TriangleInterface.md) + - [Model.UploadFiles200Response](docs/UploadFiles200Response.md) - [Model.User](docs/User.md) - [Model.Whale](docs/Whale.md) - [Model.Zebra](docs/Zebra.md) diff --git a/samples/client/petstore/csharp/restsharp/net8/Petstore/api/openapi.yaml b/samples/client/petstore/csharp/restsharp/net8/Petstore/api/openapi.yaml index d86a1d2f6d87..276850a46bc1 100644 --- a/samples/client/petstore/csharp/restsharp/net8/Petstore/api/openapi.yaml +++ b/samples/client/petstore/csharp/restsharp/net8/Petstore/api/openapi.yaml @@ -41,6 +41,23 @@ tags: - description: Operations about user name: user paths: + /upload: + post: + operationId: uploadFiles + requestBody: + content: + multipart/form-data: + schema: + $ref: "#/components/schemas/uploadFiles_request" + required: true + responses: + "200": + content: + application/json: + schema: + $ref: "#/components/schemas/uploadFiles_200_response" + description: Files uploaded successfully + summary: Upload multiple files /roles/report: get: responses: @@ -2865,6 +2882,26 @@ components: - APPROVED - MANUAL_APPROVAL_REQUIRED type: string + uploadFiles_request: + properties: + files: + items: + format: binary + type: string + type: array + required: + - files + type: object + uploadFiles_200_response: + example: + message: message + fileCount: 0 + properties: + message: + type: string + fileCount: + type: integer + type: object _foo_get_default_response: example: string: diff --git a/samples/client/petstore/csharp/restsharp/net8/Petstore/docs/DefaultApi.md b/samples/client/petstore/csharp/restsharp/net8/Petstore/docs/DefaultApi.md index d9d4abc6ebbc..d6440d513155 100644 --- a/samples/client/petstore/csharp/restsharp/net8/Petstore/docs/DefaultApi.md +++ b/samples/client/petstore/csharp/restsharp/net8/Petstore/docs/DefaultApi.md @@ -9,6 +9,7 @@ All URIs are relative to *http://petstore.swagger.io:80/v2* | [**Hello**](DefaultApi.md#hello) | **GET** /hello | Hello | | [**RolesReportGet**](DefaultApi.md#rolesreportget) | **GET** /roles/report | | | [**Test**](DefaultApi.md#test) | **GET** /test | Retrieve an existing Notificationtest's Elements | +| [**UploadFiles**](DefaultApi.md#uploadfiles) | **POST** /upload | Upload multiple files | # **FooGet** @@ -427,3 +428,92 @@ No authorization required [[Back to top]](#) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to Model list]](../README.md#documentation-for-models) [[Back to README]](../README.md) + +# **UploadFiles** +> UploadFiles200Response UploadFiles (List files) + +Upload multiple files + +### Example +```csharp +using System.Collections.Generic; +using System.Diagnostics; +using Org.OpenAPITools.Api; +using Org.OpenAPITools.Client; +using Org.OpenAPITools.Model; + +namespace Example +{ + public class UploadFilesExample + { + public static void Main() + { + Configuration config = new Configuration(); + config.BasePath = "http://petstore.swagger.io:80/v2"; + var apiInstance = new DefaultApi(config); + var files = new List(); // List | + + try + { + // Upload multiple files + UploadFiles200Response result = apiInstance.UploadFiles(files); + Debug.WriteLine(result); + } + catch (ApiException e) + { + Debug.Print("Exception when calling DefaultApi.UploadFiles: " + e.Message); + Debug.Print("Status Code: " + e.ErrorCode); + Debug.Print(e.StackTrace); + } + } + } +} +``` + +#### Using the UploadFilesWithHttpInfo variant +This returns an ApiResponse object which contains the response data, status code and headers. + +```csharp +try +{ + // Upload multiple files + ApiResponse response = apiInstance.UploadFilesWithHttpInfo(files); + Debug.Write("Status Code: " + response.StatusCode); + Debug.Write("Response Headers: " + response.Headers); + Debug.Write("Response Body: " + response.Data); +} +catch (ApiException e) +{ + Debug.Print("Exception when calling DefaultApi.UploadFilesWithHttpInfo: " + e.Message); + Debug.Print("Status Code: " + e.ErrorCode); + Debug.Print(e.StackTrace); +} +``` + +### Parameters + +| Name | Type | Description | Notes | +|------|------|-------------|-------| +| **files** | **List<System.IO.Stream>** | | | + +### Return type + +[**UploadFiles200Response**](UploadFiles200Response.md) + +### Authorization + +No authorization required + +### HTTP request headers + + - **Content-Type**: multipart/form-data + - **Accept**: application/json + + +### HTTP response details +| Status code | Description | Response headers | +|-------------|-------------|------------------| +| **200** | Files uploaded successfully | - | + +[[Back to top]](#) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to Model list]](../README.md#documentation-for-models) [[Back to README]](../README.md) + diff --git a/samples/client/petstore/csharp/restsharp/net8/Petstore/docs/UploadFiles200Response.md b/samples/client/petstore/csharp/restsharp/net8/Petstore/docs/UploadFiles200Response.md new file mode 100644 index 000000000000..2a214ae867d0 --- /dev/null +++ b/samples/client/petstore/csharp/restsharp/net8/Petstore/docs/UploadFiles200Response.md @@ -0,0 +1,11 @@ +# Org.OpenAPITools.Model.UploadFiles200Response + +## Properties + +Name | Type | Description | Notes +------------ | ------------- | ------------- | ------------- +**Message** | **string** | | [optional] +**FileCount** | **int** | | [optional] + +[[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md) + diff --git a/samples/client/petstore/csharp/restsharp/net8/Petstore/src/Org.OpenAPITools.Test/Model/UploadFiles200ResponseTests.cs b/samples/client/petstore/csharp/restsharp/net8/Petstore/src/Org.OpenAPITools.Test/Model/UploadFiles200ResponseTests.cs new file mode 100644 index 000000000000..c4f1745e6fc5 --- /dev/null +++ b/samples/client/petstore/csharp/restsharp/net8/Petstore/src/Org.OpenAPITools.Test/Model/UploadFiles200ResponseTests.cs @@ -0,0 +1,75 @@ +/* + * OpenAPI Petstore + * + * This spec is mainly for testing Petstore server and contains fake endpoints, models. Please do not use this for any other purpose. Special characters: \" \\ + * + * The version of the OpenAPI document: 1.0.0 + * Generated by: https://github.com/openapitools/openapi-generator.git + */ + + +using Xunit; + +using System; +using System.Linq; +using System.IO; +using System.Collections.Generic; +using Org.OpenAPITools.Model; +using Org.OpenAPITools.Client; +using System.Reflection; +using Newtonsoft.Json; + +namespace Org.OpenAPITools.Test.Model +{ + /// + /// Class for testing UploadFiles200Response + /// + /// + /// This file is automatically generated by OpenAPI Generator (https://openapi-generator.tech). + /// Please update the test case below to test the model. + /// + public class UploadFiles200ResponseTests : IDisposable + { + // TODO uncomment below to declare an instance variable for UploadFiles200Response + //private UploadFiles200Response instance; + + public UploadFiles200ResponseTests() + { + // TODO uncomment below to create an instance of UploadFiles200Response + //instance = new UploadFiles200Response(); + } + + public void Dispose() + { + // Cleanup when everything is done. + } + + /// + /// Test an instance of UploadFiles200Response + /// + [Fact] + public void UploadFiles200ResponseInstanceTest() + { + // TODO uncomment below to test "IsType" UploadFiles200Response + //Assert.IsType(instance); + } + + /// + /// Test the property 'Message' + /// + [Fact] + public void MessageTest() + { + // TODO unit test for the property 'Message' + } + + /// + /// Test the property 'FileCount' + /// + [Fact] + public void FileCountTest() + { + // TODO unit test for the property 'FileCount' + } + } +} diff --git a/samples/client/petstore/csharp/restsharp/net8/Petstore/src/Org.OpenAPITools/Api/DefaultApi.cs b/samples/client/petstore/csharp/restsharp/net8/Petstore/src/Org.OpenAPITools/Api/DefaultApi.cs index 6446a8be8118..ed362dc35161 100644 --- a/samples/client/petstore/csharp/restsharp/net8/Petstore/src/Org.OpenAPITools/Api/DefaultApi.cs +++ b/samples/client/petstore/csharp/restsharp/net8/Petstore/src/Org.OpenAPITools/Api/DefaultApi.cs @@ -122,6 +122,26 @@ public interface IDefaultApiSync : IApiAccessor /// Index associated with the operation. /// ApiResponse of NotificationtestGetElementsV1ResponseMPayload ApiResponse TestWithHttpInfo(int operationIndex = 0); + /// + /// Upload multiple files + /// + /// Thrown when fails to make API call + /// + /// Index associated with the operation. + /// UploadFiles200Response + UploadFiles200Response UploadFiles(List files, int operationIndex = 0); + + /// + /// Upload multiple files + /// + /// + /// + /// + /// Thrown when fails to make API call + /// + /// Index associated with the operation. + /// ApiResponse of UploadFiles200Response + ApiResponse UploadFilesWithHttpInfo(List files, int operationIndex = 0); #endregion Synchronous Operations } @@ -248,6 +268,31 @@ public interface IDefaultApiAsync : IApiAccessor /// Cancellation Token to cancel the request. /// Task of ApiResponse (NotificationtestGetElementsV1ResponseMPayload) System.Threading.Tasks.Task> TestWithHttpInfoAsync(int operationIndex = 0, System.Threading.CancellationToken cancellationToken = default); + /// + /// Upload multiple files + /// + /// + /// + /// + /// Thrown when fails to make API call + /// + /// Index associated with the operation. + /// Cancellation Token to cancel the request. + /// Task of UploadFiles200Response + System.Threading.Tasks.Task UploadFilesAsync(List files, int operationIndex = 0, System.Threading.CancellationToken cancellationToken = default); + + /// + /// Upload multiple files + /// + /// + /// + /// + /// Thrown when fails to make API call + /// + /// Index associated with the operation. + /// Cancellation Token to cancel the request. + /// Task of ApiResponse (UploadFiles200Response) + System.Threading.Tasks.Task> UploadFilesWithHttpInfoAsync(List files, int operationIndex = 0, System.Threading.CancellationToken cancellationToken = default); #endregion Asynchronous Operations } @@ -1019,5 +1064,158 @@ public async System.Threading.Tasks.Task + /// Upload multiple files + /// + /// Thrown when fails to make API call + /// + /// Index associated with the operation. + /// UploadFiles200Response + public UploadFiles200Response UploadFiles(List files, int operationIndex = 0) + { + Org.OpenAPITools.Client.ApiResponse localVarResponse = UploadFilesWithHttpInfo(files); + return localVarResponse.Data; + } + + /// + /// Upload multiple files + /// + /// Thrown when fails to make API call + /// + /// Index associated with the operation. + /// ApiResponse of UploadFiles200Response + public Org.OpenAPITools.Client.ApiResponse UploadFilesWithHttpInfo(List files, int operationIndex = 0) + { + // verify the required parameter 'files' is set + if (files == null) + { + throw new Org.OpenAPITools.Client.ApiException(400, "Missing required parameter 'files' when calling DefaultApi->UploadFiles"); + } + + Org.OpenAPITools.Client.RequestOptions localVarRequestOptions = new Org.OpenAPITools.Client.RequestOptions(); + + string[] _contentTypes = new string[] { + "multipart/form-data" + }; + + // to determine the Accept header + string[] _accepts = new string[] { + "application/json" + }; + + var localVarContentType = Org.OpenAPITools.Client.ClientUtils.SelectHeaderContentType(_contentTypes); + var localVarMultipartFormData = localVarContentType == "multipart/form-data"; + if (localVarContentType != null) + { + localVarRequestOptions.HeaderParameters.Add("Content-Type", localVarContentType); + } + + var localVarAccept = Org.OpenAPITools.Client.ClientUtils.SelectHeaderAccept(_accepts); + if (localVarAccept != null) + { + localVarRequestOptions.HeaderParameters.Add("Accept", localVarAccept); + } + + foreach (var file in files) + { + localVarRequestOptions.FileParameters.Add("files", file); + } + + localVarRequestOptions.Operation = "DefaultApi.UploadFiles"; + localVarRequestOptions.OperationIndex = operationIndex; + + + // make the HTTP request + var localVarResponse = this.Client.Post("/upload", localVarRequestOptions, this.Configuration); + if (this.ExceptionFactory != null) + { + Exception _exception = this.ExceptionFactory("UploadFiles", localVarResponse); + if (_exception != null) + { + throw _exception; + } + } + + return localVarResponse; + } + + /// + /// Upload multiple files + /// + /// Thrown when fails to make API call + /// + /// Index associated with the operation. + /// Cancellation Token to cancel the request. + /// Task of UploadFiles200Response + public async System.Threading.Tasks.Task UploadFilesAsync(List files, int operationIndex = 0, System.Threading.CancellationToken cancellationToken = default) + { + Org.OpenAPITools.Client.ApiResponse localVarResponse = await UploadFilesWithHttpInfoAsync(files, operationIndex, cancellationToken).ConfigureAwait(false); + return localVarResponse.Data; + } + + /// + /// Upload multiple files + /// + /// Thrown when fails to make API call + /// + /// Index associated with the operation. + /// Cancellation Token to cancel the request. + /// Task of ApiResponse (UploadFiles200Response) + public async System.Threading.Tasks.Task> UploadFilesWithHttpInfoAsync(List files, int operationIndex = 0, System.Threading.CancellationToken cancellationToken = default) + { + // verify the required parameter 'files' is set + if (files == null) + { + throw new Org.OpenAPITools.Client.ApiException(400, "Missing required parameter 'files' when calling DefaultApi->UploadFiles"); + } + + + Org.OpenAPITools.Client.RequestOptions localVarRequestOptions = new Org.OpenAPITools.Client.RequestOptions(); + + string[] _contentTypes = new string[] { + "multipart/form-data" + }; + + // to determine the Accept header + string[] _accepts = new string[] { + "application/json" + }; + + var localVarContentType = Org.OpenAPITools.Client.ClientUtils.SelectHeaderContentType(_contentTypes); + if (localVarContentType != null) + { + localVarRequestOptions.HeaderParameters.Add("Content-Type", localVarContentType); + } + + var localVarAccept = Org.OpenAPITools.Client.ClientUtils.SelectHeaderAccept(_accepts); + if (localVarAccept != null) + { + localVarRequestOptions.HeaderParameters.Add("Accept", localVarAccept); + } + + foreach (var file in files) + { + localVarRequestOptions.FileParameters.Add("files", file); + } + + localVarRequestOptions.Operation = "DefaultApi.UploadFiles"; + localVarRequestOptions.OperationIndex = operationIndex; + + + // make the HTTP request + var localVarResponse = await this.AsynchronousClient.PostAsync("/upload", localVarRequestOptions, this.Configuration, cancellationToken).ConfigureAwait(false); + + if (this.ExceptionFactory != null) + { + Exception _exception = this.ExceptionFactory("UploadFiles", localVarResponse); + if (_exception != null) + { + throw _exception; + } + } + + return localVarResponse; + } + } } diff --git a/samples/client/petstore/csharp/restsharp/net8/Petstore/src/Org.OpenAPITools/Model/UploadFiles200Response.cs b/samples/client/petstore/csharp/restsharp/net8/Petstore/src/Org.OpenAPITools/Model/UploadFiles200Response.cs new file mode 100644 index 000000000000..29f2ca1f896c --- /dev/null +++ b/samples/client/petstore/csharp/restsharp/net8/Petstore/src/Org.OpenAPITools/Model/UploadFiles200Response.cs @@ -0,0 +1,130 @@ +/* + * OpenAPI Petstore + * + * This spec is mainly for testing Petstore server and contains fake endpoints, models. Please do not use this for any other purpose. Special characters: \" \\ + * + * The version of the OpenAPI document: 1.0.0 + * Generated by: https://github.com/openapitools/openapi-generator.git + */ + + +using System; +using System.Collections; +using System.Collections.Generic; +using System.Collections.ObjectModel; +using System.Linq; +using System.IO; +using System.Runtime.Serialization; +using System.Text; +using System.Text.RegularExpressions; +using Newtonsoft.Json; +using Newtonsoft.Json.Converters; +using Newtonsoft.Json.Linq; +using System.ComponentModel.DataAnnotations; +using OpenAPIDateConverter = Org.OpenAPITools.Client.OpenAPIDateConverter; +using OpenAPIClientUtils = Org.OpenAPITools.Client.ClientUtils; + +namespace Org.OpenAPITools.Model +{ + /// + /// UploadFiles200Response + /// + [DataContract(Name = "uploadFiles_200_response")] + public partial class UploadFiles200Response : IEquatable, IValidatableObject + { + /// + /// Initializes a new instance of the class. + /// + /// message. + /// fileCount. + public UploadFiles200Response(string message = default, int fileCount = default) + { + this.Message = message; + this.FileCount = fileCount; + } + + /// + /// Gets or Sets Message + /// + [DataMember(Name = "message", EmitDefaultValue = false)] + public string Message { get; set; } + + /// + /// Gets or Sets FileCount + /// + [DataMember(Name = "fileCount", EmitDefaultValue = false)] + public int FileCount { get; set; } + + /// + /// Returns the string presentation of the object + /// + /// String presentation of the object + public override string ToString() + { + StringBuilder sb = new StringBuilder(); + sb.Append("class UploadFiles200Response {\n"); + sb.Append(" Message: ").Append(Message).Append("\n"); + sb.Append(" FileCount: ").Append(FileCount).Append("\n"); + sb.Append("}\n"); + return sb.ToString(); + } + + /// + /// Returns the JSON string presentation of the object + /// + /// JSON string presentation of the object + public virtual string ToJson() + { + return Newtonsoft.Json.JsonConvert.SerializeObject(this, Newtonsoft.Json.Formatting.Indented); + } + + /// + /// Returns true if objects are equal + /// + /// Object to be compared + /// Boolean + public override bool Equals(object input) + { + return OpenAPIClientUtils.compareLogic.Compare(this, input as UploadFiles200Response).AreEqual; + } + + /// + /// Returns true if UploadFiles200Response instances are equal + /// + /// Instance of UploadFiles200Response to be compared + /// Boolean + public bool Equals(UploadFiles200Response input) + { + return OpenAPIClientUtils.compareLogic.Compare(this, input).AreEqual; + } + + /// + /// Gets the hash code + /// + /// Hash code + public override int GetHashCode() + { + unchecked // Overflow is fine, just wrap + { + int hashCode = 41; + if (this.Message != null) + { + hashCode = (hashCode * 59) + this.Message.GetHashCode(); + } + hashCode = (hashCode * 59) + this.FileCount.GetHashCode(); + return hashCode; + } + } + + /// + /// To validate all properties of the instance + /// + /// Validation context + /// Validation Result + IEnumerable IValidatableObject.Validate(ValidationContext validationContext) + { + yield break; + } + } + +} diff --git a/samples/client/petstore/csharp/restsharp/net8/UseDateTimeForDate/.openapi-generator/VERSION b/samples/client/petstore/csharp/restsharp/net8/UseDateTimeForDate/.openapi-generator/VERSION index 4c631cf217a2..e465da43155f 100644 --- a/samples/client/petstore/csharp/restsharp/net8/UseDateTimeForDate/.openapi-generator/VERSION +++ b/samples/client/petstore/csharp/restsharp/net8/UseDateTimeForDate/.openapi-generator/VERSION @@ -1 +1 @@ -7.14.0-SNAPSHOT +7.14.0 diff --git a/samples/client/petstore/csharp/restsharp/net8/UseDateTimeForDate/README.md b/samples/client/petstore/csharp/restsharp/net8/UseDateTimeForDate/README.md index 014d3d2251f9..08e6ee70d213 100644 --- a/samples/client/petstore/csharp/restsharp/net8/UseDateTimeForDate/README.md +++ b/samples/client/petstore/csharp/restsharp/net8/UseDateTimeForDate/README.md @@ -6,7 +6,7 @@ This C# SDK is automatically generated by the [OpenAPI Generator](https://openap - API version: 1.0.0 - SDK version: 1.0.0 -- Generator version: 7.14.0-SNAPSHOT +- Generator version: 7.14.0 - Build package: org.openapitools.codegen.languages.CSharpClientCodegen diff --git a/samples/client/petstore/csharp/restsharp/net8/useVirtualForHooks/.openapi-generator/VERSION b/samples/client/petstore/csharp/restsharp/net8/useVirtualForHooks/.openapi-generator/VERSION index 4c631cf217a2..e465da43155f 100644 --- a/samples/client/petstore/csharp/restsharp/net8/useVirtualForHooks/.openapi-generator/VERSION +++ b/samples/client/petstore/csharp/restsharp/net8/useVirtualForHooks/.openapi-generator/VERSION @@ -1 +1 @@ -7.14.0-SNAPSHOT +7.14.0 diff --git a/samples/client/petstore/csharp/restsharp/net8/useVirtualForHooks/README.md b/samples/client/petstore/csharp/restsharp/net8/useVirtualForHooks/README.md index c5beec4a3cba..95101067dcfc 100644 --- a/samples/client/petstore/csharp/restsharp/net8/useVirtualForHooks/README.md +++ b/samples/client/petstore/csharp/restsharp/net8/useVirtualForHooks/README.md @@ -6,7 +6,7 @@ This C# SDK is automatically generated by the [OpenAPI Generator](https://openap - API version: 1.0.0 - SDK version: 1.0.0 -- Generator version: 7.14.0-SNAPSHOT +- Generator version: 7.14.0 - Build package: org.openapitools.codegen.languages.CSharpClientCodegen diff --git a/samples/client/petstore/csharp/restsharp/net9/EnumMappings/.openapi-generator/VERSION b/samples/client/petstore/csharp/restsharp/net9/EnumMappings/.openapi-generator/VERSION index 4c631cf217a2..e465da43155f 100644 --- a/samples/client/petstore/csharp/restsharp/net9/EnumMappings/.openapi-generator/VERSION +++ b/samples/client/petstore/csharp/restsharp/net9/EnumMappings/.openapi-generator/VERSION @@ -1 +1 @@ -7.14.0-SNAPSHOT +7.14.0 diff --git a/samples/client/petstore/csharp/restsharp/net9/EnumMappings/README.md b/samples/client/petstore/csharp/restsharp/net9/EnumMappings/README.md index 374caa13b756..8fb17ce015c2 100644 --- a/samples/client/petstore/csharp/restsharp/net9/EnumMappings/README.md +++ b/samples/client/petstore/csharp/restsharp/net9/EnumMappings/README.md @@ -6,7 +6,7 @@ This C# SDK is automatically generated by the [OpenAPI Generator](https://openap - API version: 1.0.0 - SDK version: 1.0.0 -- Generator version: 7.14.0-SNAPSHOT +- Generator version: 7.14.0 - Build package: org.openapitools.codegen.languages.CSharpClientCodegen diff --git a/samples/client/petstore/csharp/restsharp/standard2.0/ConditionalSerialization/.openapi-generator/FILES b/samples/client/petstore/csharp/restsharp/standard2.0/ConditionalSerialization/.openapi-generator/FILES index 0ddde99ff436..75e19e9401c7 100644 --- a/samples/client/petstore/csharp/restsharp/standard2.0/ConditionalSerialization/.openapi-generator/FILES +++ b/samples/client/petstore/csharp/restsharp/standard2.0/ConditionalSerialization/.openapi-generator/FILES @@ -107,6 +107,7 @@ docs/TestResult.md docs/TestResultCode.md docs/Triangle.md docs/TriangleInterface.md +docs/UploadFiles200Response.md docs/User.md docs/UserApi.md docs/Whale.md @@ -114,6 +115,7 @@ docs/Zebra.md docs/ZeroBasedEnum.md docs/ZeroBasedEnumClass.md git_push.sh +src/Org.OpenAPITools.Test/Model/UploadFiles200ResponseTests.cs src/Org.OpenAPITools.Test/Org.OpenAPITools.Test.csproj src/Org.OpenAPITools/Api/AnotherFakeApi.cs src/Org.OpenAPITools/Api/DefaultApi.cs @@ -241,6 +243,7 @@ src/Org.OpenAPITools/Model/TestResult.cs src/Org.OpenAPITools/Model/TestResultCode.cs src/Org.OpenAPITools/Model/Triangle.cs src/Org.OpenAPITools/Model/TriangleInterface.cs +src/Org.OpenAPITools/Model/UploadFiles200Response.cs src/Org.OpenAPITools/Model/User.cs src/Org.OpenAPITools/Model/Whale.cs src/Org.OpenAPITools/Model/Zebra.cs diff --git a/samples/client/petstore/csharp/restsharp/standard2.0/ConditionalSerialization/.openapi-generator/VERSION b/samples/client/petstore/csharp/restsharp/standard2.0/ConditionalSerialization/.openapi-generator/VERSION index 4c631cf217a2..e465da43155f 100644 --- a/samples/client/petstore/csharp/restsharp/standard2.0/ConditionalSerialization/.openapi-generator/VERSION +++ b/samples/client/petstore/csharp/restsharp/standard2.0/ConditionalSerialization/.openapi-generator/VERSION @@ -1 +1 @@ -7.14.0-SNAPSHOT +7.14.0 diff --git a/samples/client/petstore/csharp/restsharp/standard2.0/ConditionalSerialization/README.md b/samples/client/petstore/csharp/restsharp/standard2.0/ConditionalSerialization/README.md index 994498b2644c..e7810c4838fe 100644 --- a/samples/client/petstore/csharp/restsharp/standard2.0/ConditionalSerialization/README.md +++ b/samples/client/petstore/csharp/restsharp/standard2.0/ConditionalSerialization/README.md @@ -6,7 +6,7 @@ This C# SDK is automatically generated by the [OpenAPI Generator](https://openap - API version: 1.0.0 - SDK version: 1.0.0 -- Generator version: 7.14.0-SNAPSHOT +- Generator version: 7.14.0 - Build package: org.openapitools.codegen.languages.CSharpClientCodegen @@ -110,6 +110,7 @@ Class | Method | HTTP request | Description *DefaultApi* | [**Hello**](docs/DefaultApi.md#hello) | **GET** /hello | Hello *DefaultApi* | [**RolesReportGet**](docs/DefaultApi.md#rolesreportget) | **GET** /roles/report | *DefaultApi* | [**Test**](docs/DefaultApi.md#test) | **GET** /test | Retrieve an existing Notificationtest's Elements +*DefaultApi* | [**UploadFiles**](docs/DefaultApi.md#uploadfiles) | **POST** /upload | Upload multiple files *FakeApi* | [**FakeHealthGet**](docs/FakeApi.md#fakehealthget) | **GET** /fake/health | Health check endpoint *FakeApi* | [**FakeOuterBooleanSerialize**](docs/FakeApi.md#fakeouterbooleanserialize) | **POST** /fake/outer/boolean | *FakeApi* | [**FakeOuterCompositeSerialize**](docs/FakeApi.md#fakeoutercompositeserialize) | **POST** /fake/outer/composite | @@ -255,6 +256,7 @@ Class | Method | HTTP request | Description - [Model.TestResultCode](docs/TestResultCode.md) - [Model.Triangle](docs/Triangle.md) - [Model.TriangleInterface](docs/TriangleInterface.md) + - [Model.UploadFiles200Response](docs/UploadFiles200Response.md) - [Model.User](docs/User.md) - [Model.Whale](docs/Whale.md) - [Model.Zebra](docs/Zebra.md) diff --git a/samples/client/petstore/csharp/restsharp/standard2.0/ConditionalSerialization/api/openapi.yaml b/samples/client/petstore/csharp/restsharp/standard2.0/ConditionalSerialization/api/openapi.yaml index d86a1d2f6d87..276850a46bc1 100644 --- a/samples/client/petstore/csharp/restsharp/standard2.0/ConditionalSerialization/api/openapi.yaml +++ b/samples/client/petstore/csharp/restsharp/standard2.0/ConditionalSerialization/api/openapi.yaml @@ -41,6 +41,23 @@ tags: - description: Operations about user name: user paths: + /upload: + post: + operationId: uploadFiles + requestBody: + content: + multipart/form-data: + schema: + $ref: "#/components/schemas/uploadFiles_request" + required: true + responses: + "200": + content: + application/json: + schema: + $ref: "#/components/schemas/uploadFiles_200_response" + description: Files uploaded successfully + summary: Upload multiple files /roles/report: get: responses: @@ -2865,6 +2882,26 @@ components: - APPROVED - MANUAL_APPROVAL_REQUIRED type: string + uploadFiles_request: + properties: + files: + items: + format: binary + type: string + type: array + required: + - files + type: object + uploadFiles_200_response: + example: + message: message + fileCount: 0 + properties: + message: + type: string + fileCount: + type: integer + type: object _foo_get_default_response: example: string: diff --git a/samples/client/petstore/csharp/restsharp/standard2.0/ConditionalSerialization/docs/DefaultApi.md b/samples/client/petstore/csharp/restsharp/standard2.0/ConditionalSerialization/docs/DefaultApi.md index d9d4abc6ebbc..d6440d513155 100644 --- a/samples/client/petstore/csharp/restsharp/standard2.0/ConditionalSerialization/docs/DefaultApi.md +++ b/samples/client/petstore/csharp/restsharp/standard2.0/ConditionalSerialization/docs/DefaultApi.md @@ -9,6 +9,7 @@ All URIs are relative to *http://petstore.swagger.io:80/v2* | [**Hello**](DefaultApi.md#hello) | **GET** /hello | Hello | | [**RolesReportGet**](DefaultApi.md#rolesreportget) | **GET** /roles/report | | | [**Test**](DefaultApi.md#test) | **GET** /test | Retrieve an existing Notificationtest's Elements | +| [**UploadFiles**](DefaultApi.md#uploadfiles) | **POST** /upload | Upload multiple files | # **FooGet** @@ -427,3 +428,92 @@ No authorization required [[Back to top]](#) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to Model list]](../README.md#documentation-for-models) [[Back to README]](../README.md) + +# **UploadFiles** +> UploadFiles200Response UploadFiles (List files) + +Upload multiple files + +### Example +```csharp +using System.Collections.Generic; +using System.Diagnostics; +using Org.OpenAPITools.Api; +using Org.OpenAPITools.Client; +using Org.OpenAPITools.Model; + +namespace Example +{ + public class UploadFilesExample + { + public static void Main() + { + Configuration config = new Configuration(); + config.BasePath = "http://petstore.swagger.io:80/v2"; + var apiInstance = new DefaultApi(config); + var files = new List(); // List | + + try + { + // Upload multiple files + UploadFiles200Response result = apiInstance.UploadFiles(files); + Debug.WriteLine(result); + } + catch (ApiException e) + { + Debug.Print("Exception when calling DefaultApi.UploadFiles: " + e.Message); + Debug.Print("Status Code: " + e.ErrorCode); + Debug.Print(e.StackTrace); + } + } + } +} +``` + +#### Using the UploadFilesWithHttpInfo variant +This returns an ApiResponse object which contains the response data, status code and headers. + +```csharp +try +{ + // Upload multiple files + ApiResponse response = apiInstance.UploadFilesWithHttpInfo(files); + Debug.Write("Status Code: " + response.StatusCode); + Debug.Write("Response Headers: " + response.Headers); + Debug.Write("Response Body: " + response.Data); +} +catch (ApiException e) +{ + Debug.Print("Exception when calling DefaultApi.UploadFilesWithHttpInfo: " + e.Message); + Debug.Print("Status Code: " + e.ErrorCode); + Debug.Print(e.StackTrace); +} +``` + +### Parameters + +| Name | Type | Description | Notes | +|------|------|-------------|-------| +| **files** | **List<System.IO.Stream>** | | | + +### Return type + +[**UploadFiles200Response**](UploadFiles200Response.md) + +### Authorization + +No authorization required + +### HTTP request headers + + - **Content-Type**: multipart/form-data + - **Accept**: application/json + + +### HTTP response details +| Status code | Description | Response headers | +|-------------|-------------|------------------| +| **200** | Files uploaded successfully | - | + +[[Back to top]](#) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to Model list]](../README.md#documentation-for-models) [[Back to README]](../README.md) + diff --git a/samples/client/petstore/csharp/restsharp/standard2.0/ConditionalSerialization/docs/UploadFiles200Response.md b/samples/client/petstore/csharp/restsharp/standard2.0/ConditionalSerialization/docs/UploadFiles200Response.md new file mode 100644 index 000000000000..2a214ae867d0 --- /dev/null +++ b/samples/client/petstore/csharp/restsharp/standard2.0/ConditionalSerialization/docs/UploadFiles200Response.md @@ -0,0 +1,11 @@ +# Org.OpenAPITools.Model.UploadFiles200Response + +## Properties + +Name | Type | Description | Notes +------------ | ------------- | ------------- | ------------- +**Message** | **string** | | [optional] +**FileCount** | **int** | | [optional] + +[[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md) + diff --git a/samples/client/petstore/csharp/restsharp/standard2.0/ConditionalSerialization/src/Org.OpenAPITools.Test/Model/UploadFiles200ResponseTests.cs b/samples/client/petstore/csharp/restsharp/standard2.0/ConditionalSerialization/src/Org.OpenAPITools.Test/Model/UploadFiles200ResponseTests.cs new file mode 100644 index 000000000000..c4f1745e6fc5 --- /dev/null +++ b/samples/client/petstore/csharp/restsharp/standard2.0/ConditionalSerialization/src/Org.OpenAPITools.Test/Model/UploadFiles200ResponseTests.cs @@ -0,0 +1,75 @@ +/* + * OpenAPI Petstore + * + * This spec is mainly for testing Petstore server and contains fake endpoints, models. Please do not use this for any other purpose. Special characters: \" \\ + * + * The version of the OpenAPI document: 1.0.0 + * Generated by: https://github.com/openapitools/openapi-generator.git + */ + + +using Xunit; + +using System; +using System.Linq; +using System.IO; +using System.Collections.Generic; +using Org.OpenAPITools.Model; +using Org.OpenAPITools.Client; +using System.Reflection; +using Newtonsoft.Json; + +namespace Org.OpenAPITools.Test.Model +{ + /// + /// Class for testing UploadFiles200Response + /// + /// + /// This file is automatically generated by OpenAPI Generator (https://openapi-generator.tech). + /// Please update the test case below to test the model. + /// + public class UploadFiles200ResponseTests : IDisposable + { + // TODO uncomment below to declare an instance variable for UploadFiles200Response + //private UploadFiles200Response instance; + + public UploadFiles200ResponseTests() + { + // TODO uncomment below to create an instance of UploadFiles200Response + //instance = new UploadFiles200Response(); + } + + public void Dispose() + { + // Cleanup when everything is done. + } + + /// + /// Test an instance of UploadFiles200Response + /// + [Fact] + public void UploadFiles200ResponseInstanceTest() + { + // TODO uncomment below to test "IsType" UploadFiles200Response + //Assert.IsType(instance); + } + + /// + /// Test the property 'Message' + /// + [Fact] + public void MessageTest() + { + // TODO unit test for the property 'Message' + } + + /// + /// Test the property 'FileCount' + /// + [Fact] + public void FileCountTest() + { + // TODO unit test for the property 'FileCount' + } + } +} diff --git a/samples/client/petstore/csharp/restsharp/standard2.0/ConditionalSerialization/src/Org.OpenAPITools/Api/DefaultApi.cs b/samples/client/petstore/csharp/restsharp/standard2.0/ConditionalSerialization/src/Org.OpenAPITools/Api/DefaultApi.cs index 6446a8be8118..ed362dc35161 100644 --- a/samples/client/petstore/csharp/restsharp/standard2.0/ConditionalSerialization/src/Org.OpenAPITools/Api/DefaultApi.cs +++ b/samples/client/petstore/csharp/restsharp/standard2.0/ConditionalSerialization/src/Org.OpenAPITools/Api/DefaultApi.cs @@ -122,6 +122,26 @@ public interface IDefaultApiSync : IApiAccessor /// Index associated with the operation. /// ApiResponse of NotificationtestGetElementsV1ResponseMPayload ApiResponse TestWithHttpInfo(int operationIndex = 0); + /// + /// Upload multiple files + /// + /// Thrown when fails to make API call + /// + /// Index associated with the operation. + /// UploadFiles200Response + UploadFiles200Response UploadFiles(List files, int operationIndex = 0); + + /// + /// Upload multiple files + /// + /// + /// + /// + /// Thrown when fails to make API call + /// + /// Index associated with the operation. + /// ApiResponse of UploadFiles200Response + ApiResponse UploadFilesWithHttpInfo(List files, int operationIndex = 0); #endregion Synchronous Operations } @@ -248,6 +268,31 @@ public interface IDefaultApiAsync : IApiAccessor /// Cancellation Token to cancel the request. /// Task of ApiResponse (NotificationtestGetElementsV1ResponseMPayload) System.Threading.Tasks.Task> TestWithHttpInfoAsync(int operationIndex = 0, System.Threading.CancellationToken cancellationToken = default); + /// + /// Upload multiple files + /// + /// + /// + /// + /// Thrown when fails to make API call + /// + /// Index associated with the operation. + /// Cancellation Token to cancel the request. + /// Task of UploadFiles200Response + System.Threading.Tasks.Task UploadFilesAsync(List files, int operationIndex = 0, System.Threading.CancellationToken cancellationToken = default); + + /// + /// Upload multiple files + /// + /// + /// + /// + /// Thrown when fails to make API call + /// + /// Index associated with the operation. + /// Cancellation Token to cancel the request. + /// Task of ApiResponse (UploadFiles200Response) + System.Threading.Tasks.Task> UploadFilesWithHttpInfoAsync(List files, int operationIndex = 0, System.Threading.CancellationToken cancellationToken = default); #endregion Asynchronous Operations } @@ -1019,5 +1064,158 @@ public async System.Threading.Tasks.Task + /// Upload multiple files + /// + /// Thrown when fails to make API call + /// + /// Index associated with the operation. + /// UploadFiles200Response + public UploadFiles200Response UploadFiles(List files, int operationIndex = 0) + { + Org.OpenAPITools.Client.ApiResponse localVarResponse = UploadFilesWithHttpInfo(files); + return localVarResponse.Data; + } + + /// + /// Upload multiple files + /// + /// Thrown when fails to make API call + /// + /// Index associated with the operation. + /// ApiResponse of UploadFiles200Response + public Org.OpenAPITools.Client.ApiResponse UploadFilesWithHttpInfo(List files, int operationIndex = 0) + { + // verify the required parameter 'files' is set + if (files == null) + { + throw new Org.OpenAPITools.Client.ApiException(400, "Missing required parameter 'files' when calling DefaultApi->UploadFiles"); + } + + Org.OpenAPITools.Client.RequestOptions localVarRequestOptions = new Org.OpenAPITools.Client.RequestOptions(); + + string[] _contentTypes = new string[] { + "multipart/form-data" + }; + + // to determine the Accept header + string[] _accepts = new string[] { + "application/json" + }; + + var localVarContentType = Org.OpenAPITools.Client.ClientUtils.SelectHeaderContentType(_contentTypes); + var localVarMultipartFormData = localVarContentType == "multipart/form-data"; + if (localVarContentType != null) + { + localVarRequestOptions.HeaderParameters.Add("Content-Type", localVarContentType); + } + + var localVarAccept = Org.OpenAPITools.Client.ClientUtils.SelectHeaderAccept(_accepts); + if (localVarAccept != null) + { + localVarRequestOptions.HeaderParameters.Add("Accept", localVarAccept); + } + + foreach (var file in files) + { + localVarRequestOptions.FileParameters.Add("files", file); + } + + localVarRequestOptions.Operation = "DefaultApi.UploadFiles"; + localVarRequestOptions.OperationIndex = operationIndex; + + + // make the HTTP request + var localVarResponse = this.Client.Post("/upload", localVarRequestOptions, this.Configuration); + if (this.ExceptionFactory != null) + { + Exception _exception = this.ExceptionFactory("UploadFiles", localVarResponse); + if (_exception != null) + { + throw _exception; + } + } + + return localVarResponse; + } + + /// + /// Upload multiple files + /// + /// Thrown when fails to make API call + /// + /// Index associated with the operation. + /// Cancellation Token to cancel the request. + /// Task of UploadFiles200Response + public async System.Threading.Tasks.Task UploadFilesAsync(List files, int operationIndex = 0, System.Threading.CancellationToken cancellationToken = default) + { + Org.OpenAPITools.Client.ApiResponse localVarResponse = await UploadFilesWithHttpInfoAsync(files, operationIndex, cancellationToken).ConfigureAwait(false); + return localVarResponse.Data; + } + + /// + /// Upload multiple files + /// + /// Thrown when fails to make API call + /// + /// Index associated with the operation. + /// Cancellation Token to cancel the request. + /// Task of ApiResponse (UploadFiles200Response) + public async System.Threading.Tasks.Task> UploadFilesWithHttpInfoAsync(List files, int operationIndex = 0, System.Threading.CancellationToken cancellationToken = default) + { + // verify the required parameter 'files' is set + if (files == null) + { + throw new Org.OpenAPITools.Client.ApiException(400, "Missing required parameter 'files' when calling DefaultApi->UploadFiles"); + } + + + Org.OpenAPITools.Client.RequestOptions localVarRequestOptions = new Org.OpenAPITools.Client.RequestOptions(); + + string[] _contentTypes = new string[] { + "multipart/form-data" + }; + + // to determine the Accept header + string[] _accepts = new string[] { + "application/json" + }; + + var localVarContentType = Org.OpenAPITools.Client.ClientUtils.SelectHeaderContentType(_contentTypes); + if (localVarContentType != null) + { + localVarRequestOptions.HeaderParameters.Add("Content-Type", localVarContentType); + } + + var localVarAccept = Org.OpenAPITools.Client.ClientUtils.SelectHeaderAccept(_accepts); + if (localVarAccept != null) + { + localVarRequestOptions.HeaderParameters.Add("Accept", localVarAccept); + } + + foreach (var file in files) + { + localVarRequestOptions.FileParameters.Add("files", file); + } + + localVarRequestOptions.Operation = "DefaultApi.UploadFiles"; + localVarRequestOptions.OperationIndex = operationIndex; + + + // make the HTTP request + var localVarResponse = await this.AsynchronousClient.PostAsync("/upload", localVarRequestOptions, this.Configuration, cancellationToken).ConfigureAwait(false); + + if (this.ExceptionFactory != null) + { + Exception _exception = this.ExceptionFactory("UploadFiles", localVarResponse); + if (_exception != null) + { + throw _exception; + } + } + + return localVarResponse; + } + } } diff --git a/samples/client/petstore/csharp/restsharp/standard2.0/ConditionalSerialization/src/Org.OpenAPITools/Model/UploadFiles200Response.cs b/samples/client/petstore/csharp/restsharp/standard2.0/ConditionalSerialization/src/Org.OpenAPITools/Model/UploadFiles200Response.cs new file mode 100644 index 000000000000..fb7e8240a89b --- /dev/null +++ b/samples/client/petstore/csharp/restsharp/standard2.0/ConditionalSerialization/src/Org.OpenAPITools/Model/UploadFiles200Response.cs @@ -0,0 +1,186 @@ +/* + * OpenAPI Petstore + * + * This spec is mainly for testing Petstore server and contains fake endpoints, models. Please do not use this for any other purpose. Special characters: \" \\ + * + * The version of the OpenAPI document: 1.0.0 + * Generated by: https://github.com/openapitools/openapi-generator.git + */ + + +using System; +using System.Collections; +using System.Collections.Generic; +using System.Collections.ObjectModel; +using System.Linq; +using System.IO; +using System.Runtime.Serialization; +using System.Text; +using System.Text.RegularExpressions; +using Newtonsoft.Json; +using Newtonsoft.Json.Converters; +using Newtonsoft.Json.Linq; +using System.ComponentModel.DataAnnotations; +using OpenAPIDateConverter = Org.OpenAPITools.Client.OpenAPIDateConverter; +using OpenAPIClientUtils = Org.OpenAPITools.Client.ClientUtils; + +namespace Org.OpenAPITools.Model +{ + /// + /// UploadFiles200Response + /// + [DataContract(Name = "uploadFiles_200_response")] + public partial class UploadFiles200Response : IEquatable, IValidatableObject + { + /// + /// Initializes a new instance of the class. + /// + /// message. + /// fileCount. + public UploadFiles200Response(string message = default, int fileCount = default) + { + this._Message = message; + if (this.Message != null) + { + this._flagMessage = true; + } + this._FileCount = fileCount; + if (this.FileCount != null) + { + this._flagFileCount = true; + } + this.AdditionalProperties = new Dictionary(); + } + + /// + /// Gets or Sets Message + /// + [DataMember(Name = "message", EmitDefaultValue = false)] + public string Message + { + get{ return _Message;} + set + { + _Message = value; + _flagMessage = true; + } + } + private string _Message; + private bool _flagMessage; + + /// + /// Returns false as Message should not be serialized given that it's read-only. + /// + /// false (boolean) + public bool ShouldSerializeMessage() + { + return _flagMessage; + } + /// + /// Gets or Sets FileCount + /// + [DataMember(Name = "fileCount", EmitDefaultValue = false)] + public int FileCount + { + get{ return _FileCount;} + set + { + _FileCount = value; + _flagFileCount = true; + } + } + private int _FileCount; + private bool _flagFileCount; + + /// + /// Returns false as FileCount should not be serialized given that it's read-only. + /// + /// false (boolean) + public bool ShouldSerializeFileCount() + { + return _flagFileCount; + } + /// + /// Gets or Sets additional properties + /// + [JsonExtensionData] + public IDictionary AdditionalProperties { get; set; } + + /// + /// Returns the string presentation of the object + /// + /// String presentation of the object + public override string ToString() + { + StringBuilder sb = new StringBuilder(); + sb.Append("class UploadFiles200Response {\n"); + sb.Append(" Message: ").Append(Message).Append("\n"); + sb.Append(" FileCount: ").Append(FileCount).Append("\n"); + sb.Append(" AdditionalProperties: ").Append(AdditionalProperties).Append("\n"); + sb.Append("}\n"); + return sb.ToString(); + } + + /// + /// Returns the JSON string presentation of the object + /// + /// JSON string presentation of the object + public virtual string ToJson() + { + return Newtonsoft.Json.JsonConvert.SerializeObject(this, Newtonsoft.Json.Formatting.Indented); + } + + /// + /// Returns true if objects are equal + /// + /// Object to be compared + /// Boolean + public override bool Equals(object input) + { + return OpenAPIClientUtils.compareLogic.Compare(this, input as UploadFiles200Response).AreEqual; + } + + /// + /// Returns true if UploadFiles200Response instances are equal + /// + /// Instance of UploadFiles200Response to be compared + /// Boolean + public bool Equals(UploadFiles200Response input) + { + return OpenAPIClientUtils.compareLogic.Compare(this, input).AreEqual; + } + + /// + /// Gets the hash code + /// + /// Hash code + public override int GetHashCode() + { + unchecked // Overflow is fine, just wrap + { + int hashCode = 41; + if (this.Message != null) + { + hashCode = (hashCode * 59) + this.Message.GetHashCode(); + } + hashCode = (hashCode * 59) + this.FileCount.GetHashCode(); + if (this.AdditionalProperties != null) + { + hashCode = (hashCode * 59) + this.AdditionalProperties.GetHashCode(); + } + return hashCode; + } + } + + /// + /// To validate all properties of the instance + /// + /// Validation context + /// Validation Result + IEnumerable IValidatableObject.Validate(ValidationContext validationContext) + { + yield break; + } + } + +} diff --git a/samples/client/petstore/csharp/restsharp/standard2.0/Petstore/.openapi-generator/VERSION b/samples/client/petstore/csharp/restsharp/standard2.0/Petstore/.openapi-generator/VERSION index 4c631cf217a2..e465da43155f 100644 --- a/samples/client/petstore/csharp/restsharp/standard2.0/Petstore/.openapi-generator/VERSION +++ b/samples/client/petstore/csharp/restsharp/standard2.0/Petstore/.openapi-generator/VERSION @@ -1 +1 @@ -7.14.0-SNAPSHOT +7.14.0 diff --git a/samples/client/petstore/csharp/restsharp/standard2.0/Petstore/README.md b/samples/client/petstore/csharp/restsharp/standard2.0/Petstore/README.md index 762112f720e3..90a321f454c5 100644 --- a/samples/client/petstore/csharp/restsharp/standard2.0/Petstore/README.md +++ b/samples/client/petstore/csharp/restsharp/standard2.0/Petstore/README.md @@ -6,7 +6,7 @@ This C# SDK is automatically generated by the [OpenAPI Generator](https://openap - API version: 1.0.0 - SDK version: 1.0.0 -- Generator version: 7.14.0-SNAPSHOT +- Generator version: 7.14.0 - Build package: org.openapitools.codegen.languages.CSharpClientCodegen diff --git a/samples/client/petstore/csharp/unityWebRequest/net9/Petstore/.openapi-generator/FILES b/samples/client/petstore/csharp/unityWebRequest/net9/Petstore/.openapi-generator/FILES index f91fdecb6552..9de88dbfb030 100644 --- a/samples/client/petstore/csharp/unityWebRequest/net9/Petstore/.openapi-generator/FILES +++ b/samples/client/petstore/csharp/unityWebRequest/net9/Petstore/.openapi-generator/FILES @@ -105,6 +105,7 @@ docs/TestResult.md docs/TestResultCode.md docs/Triangle.md docs/TriangleInterface.md +docs/UploadFiles200Response.md docs/User.md docs/UserApi.md docs/Whale.md @@ -112,6 +113,7 @@ docs/Zebra.md docs/ZeroBasedEnum.md docs/ZeroBasedEnumClass.md git_push.sh +src/Org.OpenAPITools.Test/Model/UploadFiles200ResponseTests.cs src/Org.OpenAPITools.Test/Org.OpenAPITools.Test.asmdef src/Org.OpenAPITools/Api/AnotherFakeApi.cs src/Org.OpenAPITools/Api/DefaultApi.cs @@ -238,6 +240,7 @@ src/Org.OpenAPITools/Model/TestResult.cs src/Org.OpenAPITools/Model/TestResultCode.cs src/Org.OpenAPITools/Model/Triangle.cs src/Org.OpenAPITools/Model/TriangleInterface.cs +src/Org.OpenAPITools/Model/UploadFiles200Response.cs src/Org.OpenAPITools/Model/User.cs src/Org.OpenAPITools/Model/Whale.cs src/Org.OpenAPITools/Model/Zebra.cs diff --git a/samples/client/petstore/csharp/unityWebRequest/net9/Petstore/.openapi-generator/VERSION b/samples/client/petstore/csharp/unityWebRequest/net9/Petstore/.openapi-generator/VERSION index 4c631cf217a2..e465da43155f 100644 --- a/samples/client/petstore/csharp/unityWebRequest/net9/Petstore/.openapi-generator/VERSION +++ b/samples/client/petstore/csharp/unityWebRequest/net9/Petstore/.openapi-generator/VERSION @@ -1 +1 @@ -7.14.0-SNAPSHOT +7.14.0 diff --git a/samples/client/petstore/csharp/unityWebRequest/net9/Petstore/README.md b/samples/client/petstore/csharp/unityWebRequest/net9/Petstore/README.md index c8ec2f557035..f2989bb8687b 100644 --- a/samples/client/petstore/csharp/unityWebRequest/net9/Petstore/README.md +++ b/samples/client/petstore/csharp/unityWebRequest/net9/Petstore/README.md @@ -6,7 +6,7 @@ This C# SDK is automatically generated by the [OpenAPI Generator](https://openap - API version: 1.0.0 - SDK version: 1.0.0 -- Generator version: 7.14.0-SNAPSHOT +- Generator version: 7.14.0 - Build package: org.openapitools.codegen.languages.CSharpClientCodegen @@ -96,6 +96,7 @@ Class | Method | HTTP request | Description *DefaultApi* | [**Hello**](DefaultApi.md#hello) | **GET** /hello | Hello *DefaultApi* | [**RolesReportGet**](DefaultApi.md#rolesreportget) | **GET** /roles/report | *DefaultApi* | [**Test**](DefaultApi.md#test) | **GET** /test | Retrieve an existing Notificationtest's Elements +*DefaultApi* | [**UploadFiles**](DefaultApi.md#uploadfiles) | **POST** /upload | Upload multiple files *FakeApi* | [**FakeHealthGet**](FakeApi.md#fakehealthget) | **GET** /fake/health | Health check endpoint *FakeApi* | [**FakeOuterBooleanSerialize**](FakeApi.md#fakeouterbooleanserialize) | **POST** /fake/outer/boolean | *FakeApi* | [**FakeOuterCompositeSerialize**](FakeApi.md#fakeoutercompositeserialize) | **POST** /fake/outer/composite | @@ -241,6 +242,7 @@ Class | Method | HTTP request | Description - [Model.TestResultCode](TestResultCode.md) - [Model.Triangle](Triangle.md) - [Model.TriangleInterface](TriangleInterface.md) + - [Model.UploadFiles200Response](UploadFiles200Response.md) - [Model.User](User.md) - [Model.Whale](Whale.md) - [Model.Zebra](Zebra.md) diff --git a/samples/client/petstore/csharp/unityWebRequest/net9/Petstore/api/openapi.yaml b/samples/client/petstore/csharp/unityWebRequest/net9/Petstore/api/openapi.yaml index d86a1d2f6d87..276850a46bc1 100644 --- a/samples/client/petstore/csharp/unityWebRequest/net9/Petstore/api/openapi.yaml +++ b/samples/client/petstore/csharp/unityWebRequest/net9/Petstore/api/openapi.yaml @@ -41,6 +41,23 @@ tags: - description: Operations about user name: user paths: + /upload: + post: + operationId: uploadFiles + requestBody: + content: + multipart/form-data: + schema: + $ref: "#/components/schemas/uploadFiles_request" + required: true + responses: + "200": + content: + application/json: + schema: + $ref: "#/components/schemas/uploadFiles_200_response" + description: Files uploaded successfully + summary: Upload multiple files /roles/report: get: responses: @@ -2865,6 +2882,26 @@ components: - APPROVED - MANUAL_APPROVAL_REQUIRED type: string + uploadFiles_request: + properties: + files: + items: + format: binary + type: string + type: array + required: + - files + type: object + uploadFiles_200_response: + example: + message: message + fileCount: 0 + properties: + message: + type: string + fileCount: + type: integer + type: object _foo_get_default_response: example: string: diff --git a/samples/client/petstore/csharp/unityWebRequest/net9/Petstore/docs/DefaultApi.md b/samples/client/petstore/csharp/unityWebRequest/net9/Petstore/docs/DefaultApi.md index d9d4abc6ebbc..d6440d513155 100644 --- a/samples/client/petstore/csharp/unityWebRequest/net9/Petstore/docs/DefaultApi.md +++ b/samples/client/petstore/csharp/unityWebRequest/net9/Petstore/docs/DefaultApi.md @@ -9,6 +9,7 @@ All URIs are relative to *http://petstore.swagger.io:80/v2* | [**Hello**](DefaultApi.md#hello) | **GET** /hello | Hello | | [**RolesReportGet**](DefaultApi.md#rolesreportget) | **GET** /roles/report | | | [**Test**](DefaultApi.md#test) | **GET** /test | Retrieve an existing Notificationtest's Elements | +| [**UploadFiles**](DefaultApi.md#uploadfiles) | **POST** /upload | Upload multiple files | # **FooGet** @@ -427,3 +428,92 @@ No authorization required [[Back to top]](#) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to Model list]](../README.md#documentation-for-models) [[Back to README]](../README.md) + +# **UploadFiles** +> UploadFiles200Response UploadFiles (List files) + +Upload multiple files + +### Example +```csharp +using System.Collections.Generic; +using System.Diagnostics; +using Org.OpenAPITools.Api; +using Org.OpenAPITools.Client; +using Org.OpenAPITools.Model; + +namespace Example +{ + public class UploadFilesExample + { + public static void Main() + { + Configuration config = new Configuration(); + config.BasePath = "http://petstore.swagger.io:80/v2"; + var apiInstance = new DefaultApi(config); + var files = new List(); // List | + + try + { + // Upload multiple files + UploadFiles200Response result = apiInstance.UploadFiles(files); + Debug.WriteLine(result); + } + catch (ApiException e) + { + Debug.Print("Exception when calling DefaultApi.UploadFiles: " + e.Message); + Debug.Print("Status Code: " + e.ErrorCode); + Debug.Print(e.StackTrace); + } + } + } +} +``` + +#### Using the UploadFilesWithHttpInfo variant +This returns an ApiResponse object which contains the response data, status code and headers. + +```csharp +try +{ + // Upload multiple files + ApiResponse response = apiInstance.UploadFilesWithHttpInfo(files); + Debug.Write("Status Code: " + response.StatusCode); + Debug.Write("Response Headers: " + response.Headers); + Debug.Write("Response Body: " + response.Data); +} +catch (ApiException e) +{ + Debug.Print("Exception when calling DefaultApi.UploadFilesWithHttpInfo: " + e.Message); + Debug.Print("Status Code: " + e.ErrorCode); + Debug.Print(e.StackTrace); +} +``` + +### Parameters + +| Name | Type | Description | Notes | +|------|------|-------------|-------| +| **files** | **List<System.IO.Stream>** | | | + +### Return type + +[**UploadFiles200Response**](UploadFiles200Response.md) + +### Authorization + +No authorization required + +### HTTP request headers + + - **Content-Type**: multipart/form-data + - **Accept**: application/json + + +### HTTP response details +| Status code | Description | Response headers | +|-------------|-------------|------------------| +| **200** | Files uploaded successfully | - | + +[[Back to top]](#) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to Model list]](../README.md#documentation-for-models) [[Back to README]](../README.md) + diff --git a/samples/client/petstore/csharp/unityWebRequest/net9/Petstore/docs/UploadFiles200Response.md b/samples/client/petstore/csharp/unityWebRequest/net9/Petstore/docs/UploadFiles200Response.md new file mode 100644 index 000000000000..2a214ae867d0 --- /dev/null +++ b/samples/client/petstore/csharp/unityWebRequest/net9/Petstore/docs/UploadFiles200Response.md @@ -0,0 +1,11 @@ +# Org.OpenAPITools.Model.UploadFiles200Response + +## Properties + +Name | Type | Description | Notes +------------ | ------------- | ------------- | ------------- +**Message** | **string** | | [optional] +**FileCount** | **int** | | [optional] + +[[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md) + diff --git a/samples/client/petstore/csharp/unityWebRequest/net9/Petstore/src/Org.OpenAPITools.Test/Model/UploadFiles200ResponseTests.cs b/samples/client/petstore/csharp/unityWebRequest/net9/Petstore/src/Org.OpenAPITools.Test/Model/UploadFiles200ResponseTests.cs new file mode 100644 index 000000000000..dadaed9bd7ea --- /dev/null +++ b/samples/client/petstore/csharp/unityWebRequest/net9/Petstore/src/Org.OpenAPITools.Test/Model/UploadFiles200ResponseTests.cs @@ -0,0 +1,74 @@ +/* + * OpenAPI Petstore + * + * This spec is mainly for testing Petstore server and contains fake endpoints, models. Please do not use this for any other purpose. Special characters: \" \\ + * + * The version of the OpenAPI document: 1.0.0 + * Generated by: https://github.com/openapitools/openapi-generator.git + */ + + +using System; +using System.Linq; +using System.IO; +using System.Collections.Generic; +using Org.OpenAPITools.Api; +using Org.OpenAPITools.Model; +using Org.OpenAPITools.Client; +using System.Reflection; +using Newtonsoft.Json; +using NUnit.Framework; + +namespace Org.OpenAPITools.Test.Model +{ + /// + /// Class for testing UploadFiles200Response + /// + /// + /// This file is automatically generated by OpenAPI Generator (https://openapi-generator.tech). + /// Please update the test case below to test the model. + /// + public class UploadFiles200ResponseTests : IDisposable + { + // TODO uncomment below to declare an instance variable for UploadFiles200Response + //private UploadFiles200Response instance; + + public UploadFiles200ResponseTests() + { + // TODO uncomment below to create an instance of UploadFiles200Response + //instance = new UploadFiles200Response(); + } + + public void Dispose() + { + // Cleanup when everything is done. + } + + /// + /// Test an instance of UploadFiles200Response + /// + [Test] + public void UploadFiles200ResponseInstanceTest() + { + // TODO uncomment below to test "IsType" UploadFiles200Response + //Assert.IsType(instance); + } + + /// + /// Test the property 'Message' + /// + [Test] + public void MessageTest() + { + // TODO unit test for the property 'Message' + } + /// + /// Test the property 'FileCount' + /// + [Test] + public void FileCountTest() + { + // TODO unit test for the property 'FileCount' + } + } +} diff --git a/samples/client/petstore/csharp/unityWebRequest/net9/Petstore/src/Org.OpenAPITools/Api/DefaultApi.cs b/samples/client/petstore/csharp/unityWebRequest/net9/Petstore/src/Org.OpenAPITools/Api/DefaultApi.cs index 7392e37d6bcb..b0eb713ef6e3 100644 --- a/samples/client/petstore/csharp/unityWebRequest/net9/Petstore/src/Org.OpenAPITools/Api/DefaultApi.cs +++ b/samples/client/petstore/csharp/unityWebRequest/net9/Petstore/src/Org.OpenAPITools/Api/DefaultApi.cs @@ -111,6 +111,24 @@ public interface IDefaultApiSync : IApiAccessor /// Thrown when fails to make API call /// ApiResponse of NotificationtestGetElementsV1ResponseMPayload ApiResponse TestWithHttpInfo(); + /// + /// Upload multiple files + /// + /// Thrown when fails to make API call + /// + /// UploadFiles200Response + UploadFiles200Response UploadFiles(List files); + + /// + /// Upload multiple files + /// + /// + /// + /// + /// Thrown when fails to make API call + /// + /// ApiResponse of UploadFiles200Response + ApiResponse UploadFilesWithHttpInfo(List files); #endregion Synchronous Operations } @@ -227,6 +245,29 @@ public interface IDefaultApiAsync : IApiAccessor /// Cancellation Token to cancel the request. /// Task of ApiResponse (NotificationtestGetElementsV1ResponseMPayload) System.Threading.Tasks.Task> TestWithHttpInfoAsync(System.Threading.CancellationToken cancellationToken = default); + /// + /// Upload multiple files + /// + /// + /// + /// + /// Thrown when fails to make API call + /// + /// Cancellation Token to cancel the request. + /// Task of UploadFiles200Response + System.Threading.Tasks.Task UploadFilesAsync(List files, System.Threading.CancellationToken cancellationToken = default); + + /// + /// Upload multiple files + /// + /// + /// + /// + /// Thrown when fails to make API call + /// + /// Cancellation Token to cancel the request. + /// Task of ApiResponse (UploadFiles200Response) + System.Threading.Tasks.Task> UploadFilesWithHttpInfoAsync(List files, System.Threading.CancellationToken cancellationToken = default); #endregion Asynchronous Operations } @@ -943,5 +984,131 @@ public async System.Threading.Tasks.Task + /// Upload multiple files + /// + /// Thrown when fails to make API call + /// + /// UploadFiles200Response + public UploadFiles200Response UploadFiles(List files) + { + Org.OpenAPITools.Client.ApiResponse localVarResponse = UploadFilesWithHttpInfo(files); + return localVarResponse.Data; + } + + /// + /// Upload multiple files + /// + /// Thrown when fails to make API call + /// + /// ApiResponse of UploadFiles200Response + public Org.OpenAPITools.Client.ApiResponse UploadFilesWithHttpInfo(List files) + { + // verify the required parameter 'files' is set + if (files == null) + throw new Org.OpenAPITools.Client.ApiException(400, "Missing required parameter 'files' when calling DefaultApi->UploadFiles"); + + Org.OpenAPITools.Client.RequestOptions localVarRequestOptions = new Org.OpenAPITools.Client.RequestOptions(); + + string[] _contentTypes = new string[] { + "multipart/form-data" + }; + + // to determine the Accept header + string[] _accepts = new string[] { + "application/json" + }; + + var localVarContentType = Org.OpenAPITools.Client.ClientUtils.SelectHeaderContentType(_contentTypes); + if (localVarContentType != null) localVarRequestOptions.HeaderParameters.Add("Content-Type", localVarContentType); + + var localVarAccept = Org.OpenAPITools.Client.ClientUtils.SelectHeaderAccept(_accepts); + if (localVarAccept != null) localVarRequestOptions.HeaderParameters.Add("Accept", localVarAccept); + + + + // make the HTTP request + var localVarResponse = this.Client.Post("/upload", localVarRequestOptions, this.Configuration); + + if (this.ExceptionFactory != null) + { + Exception _exception = this.ExceptionFactory("UploadFiles", localVarResponse); + if (_exception != null) throw _exception; + } + + return localVarResponse; + } + + /// + /// Upload multiple files + /// + /// Thrown when fails to make API call + /// + /// Cancellation Token to cancel the request. + /// Task of UploadFiles200Response + public async System.Threading.Tasks.Task UploadFilesAsync(List files, System.Threading.CancellationToken cancellationToken = default) + { + var task = UploadFilesWithHttpInfoAsync(files, cancellationToken); +#if UNITY_EDITOR || !UNITY_WEBGL + Org.OpenAPITools.Client.ApiResponse localVarResponse = await task.ConfigureAwait(false); +#else + Org.OpenAPITools.Client.ApiResponse localVarResponse = await task; +#endif + return localVarResponse.Data; + } + + /// + /// Upload multiple files + /// + /// Thrown when fails to make API call + /// + /// Cancellation Token to cancel the request. + /// Task of ApiResponse (UploadFiles200Response) + public async System.Threading.Tasks.Task> UploadFilesWithHttpInfoAsync(List files, System.Threading.CancellationToken cancellationToken = default) + { + // verify the required parameter 'files' is set + if (files == null) + throw new Org.OpenAPITools.Client.ApiException(400, "Missing required parameter 'files' when calling DefaultApi->UploadFiles"); + + + Org.OpenAPITools.Client.RequestOptions localVarRequestOptions = new Org.OpenAPITools.Client.RequestOptions(); + + string[] _contentTypes = new string[] { + "multipart/form-data" + }; + + // to determine the Accept header + string[] _accepts = new string[] { + "application/json" + }; + + + var localVarContentType = Org.OpenAPITools.Client.ClientUtils.SelectHeaderContentType(_contentTypes); + if (localVarContentType != null) localVarRequestOptions.HeaderParameters.Add("Content-Type", localVarContentType); + + var localVarAccept = Org.OpenAPITools.Client.ClientUtils.SelectHeaderAccept(_accepts); + if (localVarAccept != null) localVarRequestOptions.HeaderParameters.Add("Accept", localVarAccept); + + + + // make the HTTP request + + var task = this.AsynchronousClient.PostAsync("/upload", localVarRequestOptions, this.Configuration, cancellationToken); + +#if UNITY_EDITOR || !UNITY_WEBGL + var localVarResponse = await task.ConfigureAwait(false); +#else + var localVarResponse = await task; +#endif + + if (this.ExceptionFactory != null) + { + Exception _exception = this.ExceptionFactory("UploadFiles", localVarResponse); + if (_exception != null) throw _exception; + } + + return localVarResponse; + } + } } diff --git a/samples/client/petstore/csharp/unityWebRequest/net9/Petstore/src/Org.OpenAPITools/Model/UploadFiles200Response.cs b/samples/client/petstore/csharp/unityWebRequest/net9/Petstore/src/Org.OpenAPITools/Model/UploadFiles200Response.cs new file mode 100644 index 000000000000..99a652af7594 --- /dev/null +++ b/samples/client/petstore/csharp/unityWebRequest/net9/Petstore/src/Org.OpenAPITools/Model/UploadFiles200Response.cs @@ -0,0 +1,132 @@ +/* + * OpenAPI Petstore + * + * This spec is mainly for testing Petstore server and contains fake endpoints, models. Please do not use this for any other purpose. Special characters: \" \\ + * + * The version of the OpenAPI document: 1.0.0 + * Generated by: https://github.com/openapitools/openapi-generator.git + */ + + +using System; +using System.Collections; +using System.Collections.Generic; +using System.Collections.ObjectModel; +using System.Linq; +using System.IO; +using System.Runtime.Serialization; +using System.Text; +using System.Text.RegularExpressions; +using Newtonsoft.Json; +using Newtonsoft.Json.Converters; +using Newtonsoft.Json.Linq; +using OpenAPIDateConverter = Org.OpenAPITools.Client.OpenAPIDateConverter; + +namespace Org.OpenAPITools.Model +{ + /// + /// UploadFiles200Response + /// + [DataContract(Name = "uploadFiles_200_response")] + public partial class UploadFiles200Response : IEquatable + { + /// + /// Initializes a new instance of the class. + /// + /// message. + /// fileCount. + public UploadFiles200Response(string message = default, int fileCount = default) + { + this.Message = message; + this.FileCount = fileCount; + } + + /// + /// Gets or Sets Message + /// + [DataMember(Name = "message", EmitDefaultValue = false)] + public string Message { get; set; } + + /// + /// Gets or Sets FileCount + /// + [DataMember(Name = "fileCount", EmitDefaultValue = false)] + public int FileCount { get; set; } + + /// + /// Returns the string presentation of the object + /// + /// String presentation of the object + public override string ToString() + { + StringBuilder sb = new StringBuilder(); + sb.Append("class UploadFiles200Response {\n"); + sb.Append(" Message: ").Append(Message).Append("\n"); + sb.Append(" FileCount: ").Append(FileCount).Append("\n"); + sb.Append("}\n"); + return sb.ToString(); + } + + /// + /// Returns the JSON string presentation of the object + /// + /// JSON string presentation of the object + public virtual string ToJson() + { + return Newtonsoft.Json.JsonConvert.SerializeObject(this, Newtonsoft.Json.Formatting.Indented); + } + + /// + /// Returns true if objects are equal + /// + /// Object to be compared + /// Boolean + public override bool Equals(object input) + { + return this.Equals(input as UploadFiles200Response); + } + + /// + /// Returns true if UploadFiles200Response instances are equal + /// + /// Instance of UploadFiles200Response to be compared + /// Boolean + public bool Equals(UploadFiles200Response input) + { + if (input == null) + { + return false; + } + return + ( + this.Message == input.Message || + (this.Message != null && + this.Message.Equals(input.Message)) + ) && + ( + this.FileCount == input.FileCount || + this.FileCount.Equals(input.FileCount) + ); + } + + /// + /// Gets the hash code + /// + /// Hash code + public override int GetHashCode() + { + unchecked // Overflow is fine, just wrap + { + int hashCode = 41; + if (this.Message != null) + { + hashCode = (hashCode * 59) + this.Message.GetHashCode(); + } + hashCode = (hashCode * 59) + this.FileCount.GetHashCode(); + return hashCode; + } + } + + } + +} diff --git a/samples/client/petstore/csharp/unityWebRequest/standard2.0/Petstore/.openapi-generator/FILES b/samples/client/petstore/csharp/unityWebRequest/standard2.0/Petstore/.openapi-generator/FILES index f91fdecb6552..9de88dbfb030 100644 --- a/samples/client/petstore/csharp/unityWebRequest/standard2.0/Petstore/.openapi-generator/FILES +++ b/samples/client/petstore/csharp/unityWebRequest/standard2.0/Petstore/.openapi-generator/FILES @@ -105,6 +105,7 @@ docs/TestResult.md docs/TestResultCode.md docs/Triangle.md docs/TriangleInterface.md +docs/UploadFiles200Response.md docs/User.md docs/UserApi.md docs/Whale.md @@ -112,6 +113,7 @@ docs/Zebra.md docs/ZeroBasedEnum.md docs/ZeroBasedEnumClass.md git_push.sh +src/Org.OpenAPITools.Test/Model/UploadFiles200ResponseTests.cs src/Org.OpenAPITools.Test/Org.OpenAPITools.Test.asmdef src/Org.OpenAPITools/Api/AnotherFakeApi.cs src/Org.OpenAPITools/Api/DefaultApi.cs @@ -238,6 +240,7 @@ src/Org.OpenAPITools/Model/TestResult.cs src/Org.OpenAPITools/Model/TestResultCode.cs src/Org.OpenAPITools/Model/Triangle.cs src/Org.OpenAPITools/Model/TriangleInterface.cs +src/Org.OpenAPITools/Model/UploadFiles200Response.cs src/Org.OpenAPITools/Model/User.cs src/Org.OpenAPITools/Model/Whale.cs src/Org.OpenAPITools/Model/Zebra.cs diff --git a/samples/client/petstore/csharp/unityWebRequest/standard2.0/Petstore/.openapi-generator/VERSION b/samples/client/petstore/csharp/unityWebRequest/standard2.0/Petstore/.openapi-generator/VERSION index 4c631cf217a2..e465da43155f 100644 --- a/samples/client/petstore/csharp/unityWebRequest/standard2.0/Petstore/.openapi-generator/VERSION +++ b/samples/client/petstore/csharp/unityWebRequest/standard2.0/Petstore/.openapi-generator/VERSION @@ -1 +1 @@ -7.14.0-SNAPSHOT +7.14.0 diff --git a/samples/client/petstore/csharp/unityWebRequest/standard2.0/Petstore/README.md b/samples/client/petstore/csharp/unityWebRequest/standard2.0/Petstore/README.md index c8ec2f557035..f2989bb8687b 100644 --- a/samples/client/petstore/csharp/unityWebRequest/standard2.0/Petstore/README.md +++ b/samples/client/petstore/csharp/unityWebRequest/standard2.0/Petstore/README.md @@ -6,7 +6,7 @@ This C# SDK is automatically generated by the [OpenAPI Generator](https://openap - API version: 1.0.0 - SDK version: 1.0.0 -- Generator version: 7.14.0-SNAPSHOT +- Generator version: 7.14.0 - Build package: org.openapitools.codegen.languages.CSharpClientCodegen @@ -96,6 +96,7 @@ Class | Method | HTTP request | Description *DefaultApi* | [**Hello**](DefaultApi.md#hello) | **GET** /hello | Hello *DefaultApi* | [**RolesReportGet**](DefaultApi.md#rolesreportget) | **GET** /roles/report | *DefaultApi* | [**Test**](DefaultApi.md#test) | **GET** /test | Retrieve an existing Notificationtest's Elements +*DefaultApi* | [**UploadFiles**](DefaultApi.md#uploadfiles) | **POST** /upload | Upload multiple files *FakeApi* | [**FakeHealthGet**](FakeApi.md#fakehealthget) | **GET** /fake/health | Health check endpoint *FakeApi* | [**FakeOuterBooleanSerialize**](FakeApi.md#fakeouterbooleanserialize) | **POST** /fake/outer/boolean | *FakeApi* | [**FakeOuterCompositeSerialize**](FakeApi.md#fakeoutercompositeserialize) | **POST** /fake/outer/composite | @@ -241,6 +242,7 @@ Class | Method | HTTP request | Description - [Model.TestResultCode](TestResultCode.md) - [Model.Triangle](Triangle.md) - [Model.TriangleInterface](TriangleInterface.md) + - [Model.UploadFiles200Response](UploadFiles200Response.md) - [Model.User](User.md) - [Model.Whale](Whale.md) - [Model.Zebra](Zebra.md) diff --git a/samples/client/petstore/csharp/unityWebRequest/standard2.0/Petstore/api/openapi.yaml b/samples/client/petstore/csharp/unityWebRequest/standard2.0/Petstore/api/openapi.yaml index d86a1d2f6d87..276850a46bc1 100644 --- a/samples/client/petstore/csharp/unityWebRequest/standard2.0/Petstore/api/openapi.yaml +++ b/samples/client/petstore/csharp/unityWebRequest/standard2.0/Petstore/api/openapi.yaml @@ -41,6 +41,23 @@ tags: - description: Operations about user name: user paths: + /upload: + post: + operationId: uploadFiles + requestBody: + content: + multipart/form-data: + schema: + $ref: "#/components/schemas/uploadFiles_request" + required: true + responses: + "200": + content: + application/json: + schema: + $ref: "#/components/schemas/uploadFiles_200_response" + description: Files uploaded successfully + summary: Upload multiple files /roles/report: get: responses: @@ -2865,6 +2882,26 @@ components: - APPROVED - MANUAL_APPROVAL_REQUIRED type: string + uploadFiles_request: + properties: + files: + items: + format: binary + type: string + type: array + required: + - files + type: object + uploadFiles_200_response: + example: + message: message + fileCount: 0 + properties: + message: + type: string + fileCount: + type: integer + type: object _foo_get_default_response: example: string: diff --git a/samples/client/petstore/csharp/unityWebRequest/standard2.0/Petstore/docs/DefaultApi.md b/samples/client/petstore/csharp/unityWebRequest/standard2.0/Petstore/docs/DefaultApi.md index d9d4abc6ebbc..d6440d513155 100644 --- a/samples/client/petstore/csharp/unityWebRequest/standard2.0/Petstore/docs/DefaultApi.md +++ b/samples/client/petstore/csharp/unityWebRequest/standard2.0/Petstore/docs/DefaultApi.md @@ -9,6 +9,7 @@ All URIs are relative to *http://petstore.swagger.io:80/v2* | [**Hello**](DefaultApi.md#hello) | **GET** /hello | Hello | | [**RolesReportGet**](DefaultApi.md#rolesreportget) | **GET** /roles/report | | | [**Test**](DefaultApi.md#test) | **GET** /test | Retrieve an existing Notificationtest's Elements | +| [**UploadFiles**](DefaultApi.md#uploadfiles) | **POST** /upload | Upload multiple files | # **FooGet** @@ -427,3 +428,92 @@ No authorization required [[Back to top]](#) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to Model list]](../README.md#documentation-for-models) [[Back to README]](../README.md) + +# **UploadFiles** +> UploadFiles200Response UploadFiles (List files) + +Upload multiple files + +### Example +```csharp +using System.Collections.Generic; +using System.Diagnostics; +using Org.OpenAPITools.Api; +using Org.OpenAPITools.Client; +using Org.OpenAPITools.Model; + +namespace Example +{ + public class UploadFilesExample + { + public static void Main() + { + Configuration config = new Configuration(); + config.BasePath = "http://petstore.swagger.io:80/v2"; + var apiInstance = new DefaultApi(config); + var files = new List(); // List | + + try + { + // Upload multiple files + UploadFiles200Response result = apiInstance.UploadFiles(files); + Debug.WriteLine(result); + } + catch (ApiException e) + { + Debug.Print("Exception when calling DefaultApi.UploadFiles: " + e.Message); + Debug.Print("Status Code: " + e.ErrorCode); + Debug.Print(e.StackTrace); + } + } + } +} +``` + +#### Using the UploadFilesWithHttpInfo variant +This returns an ApiResponse object which contains the response data, status code and headers. + +```csharp +try +{ + // Upload multiple files + ApiResponse response = apiInstance.UploadFilesWithHttpInfo(files); + Debug.Write("Status Code: " + response.StatusCode); + Debug.Write("Response Headers: " + response.Headers); + Debug.Write("Response Body: " + response.Data); +} +catch (ApiException e) +{ + Debug.Print("Exception when calling DefaultApi.UploadFilesWithHttpInfo: " + e.Message); + Debug.Print("Status Code: " + e.ErrorCode); + Debug.Print(e.StackTrace); +} +``` + +### Parameters + +| Name | Type | Description | Notes | +|------|------|-------------|-------| +| **files** | **List<System.IO.Stream>** | | | + +### Return type + +[**UploadFiles200Response**](UploadFiles200Response.md) + +### Authorization + +No authorization required + +### HTTP request headers + + - **Content-Type**: multipart/form-data + - **Accept**: application/json + + +### HTTP response details +| Status code | Description | Response headers | +|-------------|-------------|------------------| +| **200** | Files uploaded successfully | - | + +[[Back to top]](#) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to Model list]](../README.md#documentation-for-models) [[Back to README]](../README.md) + diff --git a/samples/client/petstore/csharp/unityWebRequest/standard2.0/Petstore/docs/UploadFiles200Response.md b/samples/client/petstore/csharp/unityWebRequest/standard2.0/Petstore/docs/UploadFiles200Response.md new file mode 100644 index 000000000000..2a214ae867d0 --- /dev/null +++ b/samples/client/petstore/csharp/unityWebRequest/standard2.0/Petstore/docs/UploadFiles200Response.md @@ -0,0 +1,11 @@ +# Org.OpenAPITools.Model.UploadFiles200Response + +## Properties + +Name | Type | Description | Notes +------------ | ------------- | ------------- | ------------- +**Message** | **string** | | [optional] +**FileCount** | **int** | | [optional] + +[[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md) + diff --git a/samples/client/petstore/csharp/unityWebRequest/standard2.0/Petstore/src/Org.OpenAPITools.Test/Model/UploadFiles200ResponseTests.cs b/samples/client/petstore/csharp/unityWebRequest/standard2.0/Petstore/src/Org.OpenAPITools.Test/Model/UploadFiles200ResponseTests.cs new file mode 100644 index 000000000000..dadaed9bd7ea --- /dev/null +++ b/samples/client/petstore/csharp/unityWebRequest/standard2.0/Petstore/src/Org.OpenAPITools.Test/Model/UploadFiles200ResponseTests.cs @@ -0,0 +1,74 @@ +/* + * OpenAPI Petstore + * + * This spec is mainly for testing Petstore server and contains fake endpoints, models. Please do not use this for any other purpose. Special characters: \" \\ + * + * The version of the OpenAPI document: 1.0.0 + * Generated by: https://github.com/openapitools/openapi-generator.git + */ + + +using System; +using System.Linq; +using System.IO; +using System.Collections.Generic; +using Org.OpenAPITools.Api; +using Org.OpenAPITools.Model; +using Org.OpenAPITools.Client; +using System.Reflection; +using Newtonsoft.Json; +using NUnit.Framework; + +namespace Org.OpenAPITools.Test.Model +{ + /// + /// Class for testing UploadFiles200Response + /// + /// + /// This file is automatically generated by OpenAPI Generator (https://openapi-generator.tech). + /// Please update the test case below to test the model. + /// + public class UploadFiles200ResponseTests : IDisposable + { + // TODO uncomment below to declare an instance variable for UploadFiles200Response + //private UploadFiles200Response instance; + + public UploadFiles200ResponseTests() + { + // TODO uncomment below to create an instance of UploadFiles200Response + //instance = new UploadFiles200Response(); + } + + public void Dispose() + { + // Cleanup when everything is done. + } + + /// + /// Test an instance of UploadFiles200Response + /// + [Test] + public void UploadFiles200ResponseInstanceTest() + { + // TODO uncomment below to test "IsType" UploadFiles200Response + //Assert.IsType(instance); + } + + /// + /// Test the property 'Message' + /// + [Test] + public void MessageTest() + { + // TODO unit test for the property 'Message' + } + /// + /// Test the property 'FileCount' + /// + [Test] + public void FileCountTest() + { + // TODO unit test for the property 'FileCount' + } + } +} diff --git a/samples/client/petstore/csharp/unityWebRequest/standard2.0/Petstore/src/Org.OpenAPITools/Api/DefaultApi.cs b/samples/client/petstore/csharp/unityWebRequest/standard2.0/Petstore/src/Org.OpenAPITools/Api/DefaultApi.cs index 7392e37d6bcb..b0eb713ef6e3 100644 --- a/samples/client/petstore/csharp/unityWebRequest/standard2.0/Petstore/src/Org.OpenAPITools/Api/DefaultApi.cs +++ b/samples/client/petstore/csharp/unityWebRequest/standard2.0/Petstore/src/Org.OpenAPITools/Api/DefaultApi.cs @@ -111,6 +111,24 @@ public interface IDefaultApiSync : IApiAccessor /// Thrown when fails to make API call /// ApiResponse of NotificationtestGetElementsV1ResponseMPayload ApiResponse TestWithHttpInfo(); + /// + /// Upload multiple files + /// + /// Thrown when fails to make API call + /// + /// UploadFiles200Response + UploadFiles200Response UploadFiles(List files); + + /// + /// Upload multiple files + /// + /// + /// + /// + /// Thrown when fails to make API call + /// + /// ApiResponse of UploadFiles200Response + ApiResponse UploadFilesWithHttpInfo(List files); #endregion Synchronous Operations } @@ -227,6 +245,29 @@ public interface IDefaultApiAsync : IApiAccessor /// Cancellation Token to cancel the request. /// Task of ApiResponse (NotificationtestGetElementsV1ResponseMPayload) System.Threading.Tasks.Task> TestWithHttpInfoAsync(System.Threading.CancellationToken cancellationToken = default); + /// + /// Upload multiple files + /// + /// + /// + /// + /// Thrown when fails to make API call + /// + /// Cancellation Token to cancel the request. + /// Task of UploadFiles200Response + System.Threading.Tasks.Task UploadFilesAsync(List files, System.Threading.CancellationToken cancellationToken = default); + + /// + /// Upload multiple files + /// + /// + /// + /// + /// Thrown when fails to make API call + /// + /// Cancellation Token to cancel the request. + /// Task of ApiResponse (UploadFiles200Response) + System.Threading.Tasks.Task> UploadFilesWithHttpInfoAsync(List files, System.Threading.CancellationToken cancellationToken = default); #endregion Asynchronous Operations } @@ -943,5 +984,131 @@ public async System.Threading.Tasks.Task + /// Upload multiple files + /// + /// Thrown when fails to make API call + /// + /// UploadFiles200Response + public UploadFiles200Response UploadFiles(List files) + { + Org.OpenAPITools.Client.ApiResponse localVarResponse = UploadFilesWithHttpInfo(files); + return localVarResponse.Data; + } + + /// + /// Upload multiple files + /// + /// Thrown when fails to make API call + /// + /// ApiResponse of UploadFiles200Response + public Org.OpenAPITools.Client.ApiResponse UploadFilesWithHttpInfo(List files) + { + // verify the required parameter 'files' is set + if (files == null) + throw new Org.OpenAPITools.Client.ApiException(400, "Missing required parameter 'files' when calling DefaultApi->UploadFiles"); + + Org.OpenAPITools.Client.RequestOptions localVarRequestOptions = new Org.OpenAPITools.Client.RequestOptions(); + + string[] _contentTypes = new string[] { + "multipart/form-data" + }; + + // to determine the Accept header + string[] _accepts = new string[] { + "application/json" + }; + + var localVarContentType = Org.OpenAPITools.Client.ClientUtils.SelectHeaderContentType(_contentTypes); + if (localVarContentType != null) localVarRequestOptions.HeaderParameters.Add("Content-Type", localVarContentType); + + var localVarAccept = Org.OpenAPITools.Client.ClientUtils.SelectHeaderAccept(_accepts); + if (localVarAccept != null) localVarRequestOptions.HeaderParameters.Add("Accept", localVarAccept); + + + + // make the HTTP request + var localVarResponse = this.Client.Post("/upload", localVarRequestOptions, this.Configuration); + + if (this.ExceptionFactory != null) + { + Exception _exception = this.ExceptionFactory("UploadFiles", localVarResponse); + if (_exception != null) throw _exception; + } + + return localVarResponse; + } + + /// + /// Upload multiple files + /// + /// Thrown when fails to make API call + /// + /// Cancellation Token to cancel the request. + /// Task of UploadFiles200Response + public async System.Threading.Tasks.Task UploadFilesAsync(List files, System.Threading.CancellationToken cancellationToken = default) + { + var task = UploadFilesWithHttpInfoAsync(files, cancellationToken); +#if UNITY_EDITOR || !UNITY_WEBGL + Org.OpenAPITools.Client.ApiResponse localVarResponse = await task.ConfigureAwait(false); +#else + Org.OpenAPITools.Client.ApiResponse localVarResponse = await task; +#endif + return localVarResponse.Data; + } + + /// + /// Upload multiple files + /// + /// Thrown when fails to make API call + /// + /// Cancellation Token to cancel the request. + /// Task of ApiResponse (UploadFiles200Response) + public async System.Threading.Tasks.Task> UploadFilesWithHttpInfoAsync(List files, System.Threading.CancellationToken cancellationToken = default) + { + // verify the required parameter 'files' is set + if (files == null) + throw new Org.OpenAPITools.Client.ApiException(400, "Missing required parameter 'files' when calling DefaultApi->UploadFiles"); + + + Org.OpenAPITools.Client.RequestOptions localVarRequestOptions = new Org.OpenAPITools.Client.RequestOptions(); + + string[] _contentTypes = new string[] { + "multipart/form-data" + }; + + // to determine the Accept header + string[] _accepts = new string[] { + "application/json" + }; + + + var localVarContentType = Org.OpenAPITools.Client.ClientUtils.SelectHeaderContentType(_contentTypes); + if (localVarContentType != null) localVarRequestOptions.HeaderParameters.Add("Content-Type", localVarContentType); + + var localVarAccept = Org.OpenAPITools.Client.ClientUtils.SelectHeaderAccept(_accepts); + if (localVarAccept != null) localVarRequestOptions.HeaderParameters.Add("Accept", localVarAccept); + + + + // make the HTTP request + + var task = this.AsynchronousClient.PostAsync("/upload", localVarRequestOptions, this.Configuration, cancellationToken); + +#if UNITY_EDITOR || !UNITY_WEBGL + var localVarResponse = await task.ConfigureAwait(false); +#else + var localVarResponse = await task; +#endif + + if (this.ExceptionFactory != null) + { + Exception _exception = this.ExceptionFactory("UploadFiles", localVarResponse); + if (_exception != null) throw _exception; + } + + return localVarResponse; + } + } } diff --git a/samples/client/petstore/csharp/unityWebRequest/standard2.0/Petstore/src/Org.OpenAPITools/Model/UploadFiles200Response.cs b/samples/client/petstore/csharp/unityWebRequest/standard2.0/Petstore/src/Org.OpenAPITools/Model/UploadFiles200Response.cs new file mode 100644 index 000000000000..99a652af7594 --- /dev/null +++ b/samples/client/petstore/csharp/unityWebRequest/standard2.0/Petstore/src/Org.OpenAPITools/Model/UploadFiles200Response.cs @@ -0,0 +1,132 @@ +/* + * OpenAPI Petstore + * + * This spec is mainly for testing Petstore server and contains fake endpoints, models. Please do not use this for any other purpose. Special characters: \" \\ + * + * The version of the OpenAPI document: 1.0.0 + * Generated by: https://github.com/openapitools/openapi-generator.git + */ + + +using System; +using System.Collections; +using System.Collections.Generic; +using System.Collections.ObjectModel; +using System.Linq; +using System.IO; +using System.Runtime.Serialization; +using System.Text; +using System.Text.RegularExpressions; +using Newtonsoft.Json; +using Newtonsoft.Json.Converters; +using Newtonsoft.Json.Linq; +using OpenAPIDateConverter = Org.OpenAPITools.Client.OpenAPIDateConverter; + +namespace Org.OpenAPITools.Model +{ + /// + /// UploadFiles200Response + /// + [DataContract(Name = "uploadFiles_200_response")] + public partial class UploadFiles200Response : IEquatable + { + /// + /// Initializes a new instance of the class. + /// + /// message. + /// fileCount. + public UploadFiles200Response(string message = default, int fileCount = default) + { + this.Message = message; + this.FileCount = fileCount; + } + + /// + /// Gets or Sets Message + /// + [DataMember(Name = "message", EmitDefaultValue = false)] + public string Message { get; set; } + + /// + /// Gets or Sets FileCount + /// + [DataMember(Name = "fileCount", EmitDefaultValue = false)] + public int FileCount { get; set; } + + /// + /// Returns the string presentation of the object + /// + /// String presentation of the object + public override string ToString() + { + StringBuilder sb = new StringBuilder(); + sb.Append("class UploadFiles200Response {\n"); + sb.Append(" Message: ").Append(Message).Append("\n"); + sb.Append(" FileCount: ").Append(FileCount).Append("\n"); + sb.Append("}\n"); + return sb.ToString(); + } + + /// + /// Returns the JSON string presentation of the object + /// + /// JSON string presentation of the object + public virtual string ToJson() + { + return Newtonsoft.Json.JsonConvert.SerializeObject(this, Newtonsoft.Json.Formatting.Indented); + } + + /// + /// Returns true if objects are equal + /// + /// Object to be compared + /// Boolean + public override bool Equals(object input) + { + return this.Equals(input as UploadFiles200Response); + } + + /// + /// Returns true if UploadFiles200Response instances are equal + /// + /// Instance of UploadFiles200Response to be compared + /// Boolean + public bool Equals(UploadFiles200Response input) + { + if (input == null) + { + return false; + } + return + ( + this.Message == input.Message || + (this.Message != null && + this.Message.Equals(input.Message)) + ) && + ( + this.FileCount == input.FileCount || + this.FileCount.Equals(input.FileCount) + ); + } + + /// + /// Gets the hash code + /// + /// Hash code + public override int GetHashCode() + { + unchecked // Overflow is fine, just wrap + { + int hashCode = 41; + if (this.Message != null) + { + hashCode = (hashCode * 59) + this.Message.GetHashCode(); + } + hashCode = (hashCode * 59) + this.FileCount.GetHashCode(); + return hashCode; + } + } + + } + +} diff --git a/samples/server/petstore/aspnetcore-3.0/.openapi-generator/VERSION b/samples/server/petstore/aspnetcore-3.0/.openapi-generator/VERSION index 4c631cf217a2..e465da43155f 100644 --- a/samples/server/petstore/aspnetcore-3.0/.openapi-generator/VERSION +++ b/samples/server/petstore/aspnetcore-3.0/.openapi-generator/VERSION @@ -1 +1 @@ -7.14.0-SNAPSHOT +7.14.0 diff --git a/samples/server/petstore/aspnetcore-3.1/.openapi-generator/VERSION b/samples/server/petstore/aspnetcore-3.1/.openapi-generator/VERSION index 4c631cf217a2..e465da43155f 100644 --- a/samples/server/petstore/aspnetcore-3.1/.openapi-generator/VERSION +++ b/samples/server/petstore/aspnetcore-3.1/.openapi-generator/VERSION @@ -1 +1 @@ -7.14.0-SNAPSHOT +7.14.0 diff --git a/samples/server/petstore/aspnetcore-5.0/.openapi-generator/VERSION b/samples/server/petstore/aspnetcore-5.0/.openapi-generator/VERSION index 4c631cf217a2..e465da43155f 100644 --- a/samples/server/petstore/aspnetcore-5.0/.openapi-generator/VERSION +++ b/samples/server/petstore/aspnetcore-5.0/.openapi-generator/VERSION @@ -1 +1 @@ -7.14.0-SNAPSHOT +7.14.0 diff --git a/samples/server/petstore/aspnetcore-6.0-NewtonsoftFalse/.openapi-generator/VERSION b/samples/server/petstore/aspnetcore-6.0-NewtonsoftFalse/.openapi-generator/VERSION index 4c631cf217a2..e465da43155f 100644 --- a/samples/server/petstore/aspnetcore-6.0-NewtonsoftFalse/.openapi-generator/VERSION +++ b/samples/server/petstore/aspnetcore-6.0-NewtonsoftFalse/.openapi-generator/VERSION @@ -1 +1 @@ -7.14.0-SNAPSHOT +7.14.0 diff --git a/samples/server/petstore/aspnetcore-6.0-nullableReferenceTypes/.openapi-generator/VERSION b/samples/server/petstore/aspnetcore-6.0-nullableReferenceTypes/.openapi-generator/VERSION index 4c631cf217a2..e465da43155f 100644 --- a/samples/server/petstore/aspnetcore-6.0-nullableReferenceTypes/.openapi-generator/VERSION +++ b/samples/server/petstore/aspnetcore-6.0-nullableReferenceTypes/.openapi-generator/VERSION @@ -1 +1 @@ -7.14.0-SNAPSHOT +7.14.0 diff --git a/samples/server/petstore/aspnetcore-6.0-pocoModels/.openapi-generator/VERSION b/samples/server/petstore/aspnetcore-6.0-pocoModels/.openapi-generator/VERSION index 4c631cf217a2..e465da43155f 100644 --- a/samples/server/petstore/aspnetcore-6.0-pocoModels/.openapi-generator/VERSION +++ b/samples/server/petstore/aspnetcore-6.0-pocoModels/.openapi-generator/VERSION @@ -1 +1 @@ -7.14.0-SNAPSHOT +7.14.0 diff --git a/samples/server/petstore/aspnetcore-6.0-project4Models/.openapi-generator/VERSION b/samples/server/petstore/aspnetcore-6.0-project4Models/.openapi-generator/VERSION index 4c631cf217a2..e465da43155f 100644 --- a/samples/server/petstore/aspnetcore-6.0-project4Models/.openapi-generator/VERSION +++ b/samples/server/petstore/aspnetcore-6.0-project4Models/.openapi-generator/VERSION @@ -1 +1 @@ -7.14.0-SNAPSHOT +7.14.0 diff --git a/samples/server/petstore/aspnetcore-6.0-useSwashBuckle/.openapi-generator/VERSION b/samples/server/petstore/aspnetcore-6.0-useSwashBuckle/.openapi-generator/VERSION index 4c631cf217a2..e465da43155f 100644 --- a/samples/server/petstore/aspnetcore-6.0-useSwashBuckle/.openapi-generator/VERSION +++ b/samples/server/petstore/aspnetcore-6.0-useSwashBuckle/.openapi-generator/VERSION @@ -1 +1 @@ -7.14.0-SNAPSHOT +7.14.0 diff --git a/samples/server/petstore/aspnetcore-6.0/.openapi-generator/VERSION b/samples/server/petstore/aspnetcore-6.0/.openapi-generator/VERSION index 4c631cf217a2..e465da43155f 100644 --- a/samples/server/petstore/aspnetcore-6.0/.openapi-generator/VERSION +++ b/samples/server/petstore/aspnetcore-6.0/.openapi-generator/VERSION @@ -1 +1 @@ -7.14.0-SNAPSHOT +7.14.0 diff --git a/samples/server/petstore/aspnetcore-8.0-NewtonsoftFalse/.openapi-generator/VERSION b/samples/server/petstore/aspnetcore-8.0-NewtonsoftFalse/.openapi-generator/VERSION index 4c631cf217a2..e465da43155f 100644 --- a/samples/server/petstore/aspnetcore-8.0-NewtonsoftFalse/.openapi-generator/VERSION +++ b/samples/server/petstore/aspnetcore-8.0-NewtonsoftFalse/.openapi-generator/VERSION @@ -1 +1 @@ -7.14.0-SNAPSHOT +7.14.0 diff --git a/samples/server/petstore/aspnetcore-8.0-nullableReferenceTypes/.openapi-generator/VERSION b/samples/server/petstore/aspnetcore-8.0-nullableReferenceTypes/.openapi-generator/VERSION index 4c631cf217a2..e465da43155f 100644 --- a/samples/server/petstore/aspnetcore-8.0-nullableReferenceTypes/.openapi-generator/VERSION +++ b/samples/server/petstore/aspnetcore-8.0-nullableReferenceTypes/.openapi-generator/VERSION @@ -1 +1 @@ -7.14.0-SNAPSHOT +7.14.0 diff --git a/samples/server/petstore/aspnetcore-8.0-pocoModels/.openapi-generator/VERSION b/samples/server/petstore/aspnetcore-8.0-pocoModels/.openapi-generator/VERSION index 4c631cf217a2..e465da43155f 100644 --- a/samples/server/petstore/aspnetcore-8.0-pocoModels/.openapi-generator/VERSION +++ b/samples/server/petstore/aspnetcore-8.0-pocoModels/.openapi-generator/VERSION @@ -1 +1 @@ -7.14.0-SNAPSHOT +7.14.0 diff --git a/samples/server/petstore/aspnetcore-8.0-project4Models/.openapi-generator/VERSION b/samples/server/petstore/aspnetcore-8.0-project4Models/.openapi-generator/VERSION index 4c631cf217a2..e465da43155f 100644 --- a/samples/server/petstore/aspnetcore-8.0-project4Models/.openapi-generator/VERSION +++ b/samples/server/petstore/aspnetcore-8.0-project4Models/.openapi-generator/VERSION @@ -1 +1 @@ -7.14.0-SNAPSHOT +7.14.0 diff --git a/samples/server/petstore/aspnetcore-8.0-use-centralized-package-version-management/.openapi-generator/VERSION b/samples/server/petstore/aspnetcore-8.0-use-centralized-package-version-management/.openapi-generator/VERSION index 4c631cf217a2..e465da43155f 100644 --- a/samples/server/petstore/aspnetcore-8.0-use-centralized-package-version-management/.openapi-generator/VERSION +++ b/samples/server/petstore/aspnetcore-8.0-use-centralized-package-version-management/.openapi-generator/VERSION @@ -1 +1 @@ -7.14.0-SNAPSHOT +7.14.0 diff --git a/samples/server/petstore/aspnetcore-8.0-useSwashBuckle/.openapi-generator/VERSION b/samples/server/petstore/aspnetcore-8.0-useSwashBuckle/.openapi-generator/VERSION index 4c631cf217a2..e465da43155f 100644 --- a/samples/server/petstore/aspnetcore-8.0-useSwashBuckle/.openapi-generator/VERSION +++ b/samples/server/petstore/aspnetcore-8.0-useSwashBuckle/.openapi-generator/VERSION @@ -1 +1 @@ -7.14.0-SNAPSHOT +7.14.0 diff --git a/samples/server/petstore/aspnetcore-8.0/.openapi-generator/VERSION b/samples/server/petstore/aspnetcore-8.0/.openapi-generator/VERSION index 4c631cf217a2..e465da43155f 100644 --- a/samples/server/petstore/aspnetcore-8.0/.openapi-generator/VERSION +++ b/samples/server/petstore/aspnetcore-8.0/.openapi-generator/VERSION @@ -1 +1 @@ -7.14.0-SNAPSHOT +7.14.0 diff --git a/samples/server/petstore/aspnetcore/.openapi-generator/VERSION b/samples/server/petstore/aspnetcore/.openapi-generator/VERSION index 4c631cf217a2..e465da43155f 100644 --- a/samples/server/petstore/aspnetcore/.openapi-generator/VERSION +++ b/samples/server/petstore/aspnetcore/.openapi-generator/VERSION @@ -1 +1 @@ -7.14.0-SNAPSHOT +7.14.0