diff --git a/src/Microsoft.OpenApi/Models/OpenApiParameter.cs b/src/Microsoft.OpenApi/Models/OpenApiParameter.cs index 97edce131..03b465109 100644 --- a/src/Microsoft.OpenApi/Models/OpenApiParameter.cs +++ b/src/Microsoft.OpenApi/Models/OpenApiParameter.cs @@ -14,6 +14,8 @@ namespace Microsoft.OpenApi.Models /// public class OpenApiParameter : IOpenApiSerializable, IOpenApiReferenceable, IOpenApiExtensible { + private bool? _explode; + /// /// Indicates if object is populated with data or is just a reference to the data /// @@ -79,7 +81,11 @@ public class OpenApiParameter : IOpenApiSerializable, IOpenApiReferenceable, IOp /// When style is form, the default value is true. /// For all other styles, the default value is false. /// - public bool Explode { get; set; } + public bool Explode + { + get => _explode ?? Style == ParameterStyle.Form; + set => _explode = value; + } /// /// Determines whether the parameter value SHOULD allow reserved characters, diff --git a/test/Microsoft.OpenApi.Tests/Models/OpenApiParameterTests.cs b/test/Microsoft.OpenApi.Tests/Models/OpenApiParameterTests.cs index f37d18ed7..b630f3126 100644 --- a/test/Microsoft.OpenApi.Tests/Models/OpenApiParameterTests.cs +++ b/test/Microsoft.OpenApi.Tests/Models/OpenApiParameterTests.cs @@ -163,6 +163,24 @@ public OpenApiParameterTests(ITestOutputHelper output) _output = output; } + [Theory] + [InlineData(ParameterStyle.Form, true)] + [InlineData(ParameterStyle.SpaceDelimited, false)] + [InlineData(null, false)] + public void WhenStyleIsFormTheDefaultValueOfExplodeShouldBeTrueOtherwiseFalse(ParameterStyle? style, bool expectedExplode) + { + // Arrange + var parameter = new OpenApiParameter + { + Name = "name1", + In = ParameterLocation.Query, + Style = style + }; + + // Act & Assert + parameter.Explode.Should().Be(expectedExplode); + } + [Fact] public void SerializeBasicParameterAsV3JsonWorks() {