From 07130bb27518f33aa7dee7aa982c90a46a63c665 Mon Sep 17 00:00:00 2001 From: simonnieder Date: Thu, 14 Nov 2024 14:58:31 +0100 Subject: [PATCH] adds required check for parameters on multipart requests --- src/NSwag.CodeGeneration.CSharp.Tests/BinaryTests.cs | 4 ++-- src/NSwag.CodeGeneration.CSharp/Templates/Client.Class.liquid | 2 +- src/NSwag.CodeGeneration/Models/OperationModelBase.cs | 3 ++- 3 files changed, 5 insertions(+), 4 deletions(-) diff --git a/src/NSwag.CodeGeneration.CSharp.Tests/BinaryTests.cs b/src/NSwag.CodeGeneration.CSharp.Tests/BinaryTests.cs index 1f5a83cc33..195e8c12cd 100644 --- a/src/NSwag.CodeGeneration.CSharp.Tests/BinaryTests.cs +++ b/src/NSwag.CodeGeneration.CSharp.Tests/BinaryTests.cs @@ -442,7 +442,7 @@ public async Task When_multipart_with_ref_should_read_schema() var code = codeGenerator.GenerateFile(); //// Assert - Assert.Contains("public virtual async System.Threading.Tasks.Task AddFileAsync(FileParameter file, Model? model, System.Threading.CancellationToken cancellationToken)", code); + Assert.Contains("public virtual async System.Threading.Tasks.Task AddFileAsync(FileParameter file, Model model, System.Threading.CancellationToken cancellationToken)", code); Assert.Contains("var content_file_ = new System.Net.Http.StreamContent(file.Data);", code); Assert.Contains("public partial class FileParameter", code); } @@ -504,7 +504,7 @@ public async Task When_multipart_inline_schema() var code = codeGenerator.GenerateFile(); //// Assert - Assert.Contains("public virtual async System.Threading.Tasks.Task AddFileAsync(FileParameter file, Model? model, System.Threading.CancellationToken cancellationToken)", code); + Assert.Contains("public virtual async System.Threading.Tasks.Task AddFileAsync(FileParameter file, Model model, System.Threading.CancellationToken cancellationToken)", code); Assert.Contains("var content_file_ = new System.Net.Http.StreamContent(file.Data);", code); Assert.Contains("public partial class FileParameter", code); } diff --git a/src/NSwag.CodeGeneration.CSharp/Templates/Client.Class.liquid b/src/NSwag.CodeGeneration.CSharp/Templates/Client.Class.liquid index 52400fa632..6862d9c26c 100644 --- a/src/NSwag.CodeGeneration.CSharp/Templates/Client.Class.liquid +++ b/src/NSwag.CodeGeneration.CSharp/Templates/Client.Class.liquid @@ -247,7 +247,7 @@ content_.Headers.Remove("Content-Type"); content_.Headers.TryAddWithoutValidation("Content-Type", "multipart/form-data; boundary=" + boundary_); {% for parameter in operation.FormParameters %} -{% if parameter.IsNullable -%} +{% if parameter.IsNullable or parameter.IsOptional -%} if ({{ parameter.VariableName }} != null) {% else -%} if ({{ parameter.VariableName }} == null) diff --git a/src/NSwag.CodeGeneration/Models/OperationModelBase.cs b/src/NSwag.CodeGeneration/Models/OperationModelBase.cs index 9af99efa68..7fcb09a375 100644 --- a/src/NSwag.CodeGeneration/Models/OperationModelBase.cs +++ b/src/NSwag.CodeGeneration/Models/OperationModelBase.cs @@ -366,7 +366,8 @@ protected IList GetActualParameters() OpenApiParameterCollectionFormat.Multi : OpenApiParameterCollectionFormat.Undefined, //Explode = p.Value.Type.HasFlag(JsonObjectType.Array) && p.Value.Item != null, //Schema = p.Value.Type.HasFlag(JsonObjectType.Array) && p.Value.Item != null ? p.Value.Item : p.Value, - Position = parameters.Count + 100 + i + Position = parameters.Count + 100 + i, + IsRequired = p.Value.IsRequired })).ToList(); }