Browse Source

Don't generate RequestBody for parameters when disabledInferredBody is true (#47659)

Safia Abdalla 2 years ago
parent
commit
06ff89953e
2 changed files with 15 additions and 3 deletions
  1. 3 3
      src/OpenApi/src/OpenApiGenerator.cs
  2. 12 0
      src/OpenApi/test/OpenApiGeneratorTests.cs

+ 3 - 3
src/OpenApi/src/OpenApiGenerator.cs

@@ -78,7 +78,7 @@ internal sealed class OpenApiGenerator
             Description = metadata.GetMetadata<IEndpointDescriptionMetadata>()?.Description,
             Tags = GetOperationTags(methodInfo, metadata),
             Parameters = GetOpenApiParameters(methodInfo, pattern, disableInferredBody),
-            RequestBody = GetOpenApiRequestBody(methodInfo, metadata, pattern),
+            RequestBody = GetOpenApiRequestBody(methodInfo, metadata, pattern, disableInferredBody),
             Responses = GetOpenApiResponses(methodInfo, metadata)
         };
 
@@ -251,7 +251,7 @@ internal sealed class OpenApiGenerator
         }
     }
 
-    private OpenApiRequestBody? GetOpenApiRequestBody(MethodInfo methodInfo, EndpointMetadataCollection metadata, RoutePattern pattern)
+    private OpenApiRequestBody? GetOpenApiRequestBody(MethodInfo methodInfo, EndpointMetadataCollection metadata, RoutePattern pattern, bool disableInferredBody)
     {
         var hasFormOrBodyParameter = false;
         ParameterInfo? requestBodyParameter = null;
@@ -259,7 +259,7 @@ internal sealed class OpenApiGenerator
         var parameters = PropertyAsParameterInfo.Flatten(methodInfo.GetParameters(), ParameterBindingMethodCache);
         foreach (var parameter in parameters)
         {
-            var (bodyOrFormParameter, _, _) = GetOpenApiParameterLocation(parameter, pattern, false);
+            var (bodyOrFormParameter, _, _) = GetOpenApiParameterLocation(parameter, pattern, disableInferredBody);
             hasFormOrBodyParameter |= bodyOrFormParameter;
             if (hasFormOrBodyParameter)
             {

+ 12 - 0
src/OpenApi/test/OpenApiGeneratorTests.cs

@@ -968,6 +968,18 @@ public class OpenApiOperationGeneratorTests
             param => Assert.False(param.Required));
     }
 
+    [Fact]
+    public void DoesNotGenerateRequestBodyWhenInferredBodyDisabled()
+    {
+        var operation = GetOpenApiOperation((string[] names) => { }, httpMethods: new[] { "GET" });
+
+        var parameter = Assert.Single(operation.Parameters);
+
+        Assert.Equal("names", parameter.Name);
+        Assert.Equal(ParameterLocation.Query, parameter.In);
+        Assert.Null(operation.RequestBody);
+    }
+
     private static OpenApiOperation GetOpenApiOperation(
         Delegate action,
         string pattern = null,