From 8b4833cce98cb8d8c782ceed8d5d122357b71065 Mon Sep 17 00:00:00 2001 From: Vincent Biret Date: Fri, 3 Jan 2025 12:51:10 -0500 Subject: [PATCH 1/2] fix: v2 request body content null propagation --- .../Models/OpenApiOperation.cs | 21 +++++++++---------- 1 file changed, 10 insertions(+), 11 deletions(-) diff --git a/src/Microsoft.OpenApi/Models/OpenApiOperation.cs b/src/Microsoft.OpenApi/Models/OpenApiOperation.cs index 6e54cd894..eb5f9cdc0 100644 --- a/src/Microsoft.OpenApi/Models/OpenApiOperation.cs +++ b/src/Microsoft.OpenApi/Models/OpenApiOperation.cs @@ -237,18 +237,18 @@ public void SerializeAsV2(IOpenApiWriter writer) List parameters; if (Parameters == null) { - parameters = new(); + parameters = []; } else { - parameters = new(Parameters); + parameters = [.. Parameters]; } if (RequestBody != null) { // consumes - var consumes = RequestBody.Content.Keys.Distinct().ToList(); - if (consumes.Any()) + var consumes = new HashSet(RequestBody.Content?.Keys.Distinct(StringComparer.OrdinalIgnoreCase) ?? [], StringComparer.OrdinalIgnoreCase); + if (consumes.Count > 0) { // This is form data. We need to split the request body into multiple parameters. if (consumes.Contains("application/x-www-form-urlencoded") || @@ -261,19 +261,18 @@ public void SerializeAsV2(IOpenApiWriter writer) parameters.Add(RequestBody.ConvertToBodyParameter()); } } - else if (RequestBody.Reference != null) + else if (RequestBody.Reference != null && RequestBody.Reference.HostDocument is {} hostDocument) { - var hostDocument = RequestBody.Reference.HostDocument; parameters.Add( new OpenApiParameterReference(RequestBody.Reference.Id, hostDocument)); if (hostDocument != null) { - consumes = RequestBody.Content.Keys.Distinct().ToList(); + consumes = new (RequestBody.Content?.Keys.Distinct(StringComparer.OrdinalIgnoreCase) ?? [], StringComparer.OrdinalIgnoreCase); } } - if (consumes.Any()) + if (consumes.Count > 0) { writer.WritePropertyName(OpenApiConstants.Consumes); writer.WriteStartArray(); @@ -294,10 +293,10 @@ public void SerializeAsV2(IOpenApiWriter writer) Responses .Where(static r => r.Value.Reference is {HostDocument: not null}) .SelectMany(static r => r.Value.Content?.Keys)) - .Distinct() - .ToList(); + .Distinct(StringComparer.OrdinalIgnoreCase) + .ToArray(); - if (produces.Any()) + if (produces.Length > 0) { // produces writer.WritePropertyName(OpenApiConstants.Produces); From 8d701955f24801b495dfd4b3b7a2351b499355b2 Mon Sep 17 00:00:00 2001 From: Vincent Biret Date: Fri, 3 Jan 2025 13:17:34 -0500 Subject: [PATCH 2/2] fix: removes redundant assignment Signed-off-by: Vincent Biret --- src/Microsoft.OpenApi/Models/OpenApiOperation.cs | 5 ----- 1 file changed, 5 deletions(-) diff --git a/src/Microsoft.OpenApi/Models/OpenApiOperation.cs b/src/Microsoft.OpenApi/Models/OpenApiOperation.cs index eb5f9cdc0..6182eda2b 100644 --- a/src/Microsoft.OpenApi/Models/OpenApiOperation.cs +++ b/src/Microsoft.OpenApi/Models/OpenApiOperation.cs @@ -265,11 +265,6 @@ public void SerializeAsV2(IOpenApiWriter writer) { parameters.Add( new OpenApiParameterReference(RequestBody.Reference.Id, hostDocument)); - - if (hostDocument != null) - { - consumes = new (RequestBody.Content?.Keys.Distinct(StringComparer.OrdinalIgnoreCase) ?? [], StringComparer.OrdinalIgnoreCase); - } } if (consumes.Count > 0)