diff --git a/src/WireMock.Net/Util/QueryStringParser.cs b/src/WireMock.Net/Util/QueryStringParser.cs index a512a1b1..53c399bf 100644 --- a/src/WireMock.Net/Util/QueryStringParser.cs +++ b/src/WireMock.Net/Util/QueryStringParser.cs @@ -18,11 +18,6 @@ namespace WireMock.Util string[] JoinParts(string[] parts) { - if (parts.Length > 2) - { - return new[] { string.Join("=", parts, 1, parts.Length - 1) }; - } - if (parts.Length > 1) { return parts[1].Split(new[] { "," }, StringSplitOptions.RemoveEmptyEntries); // support "?key=1,2" @@ -33,7 +28,7 @@ namespace WireMock.Util return queryString.TrimStart('?') .Split(new[] { '&', ';' }, StringSplitOptions.RemoveEmptyEntries) // Support "?key=value;key=anotherValue" and "?key=value&key=anotherValue" - .Select(parameter => parameter.Split(new[] { '=' }, StringSplitOptions.RemoveEmptyEntries)) + .Select(parameter => parameter.Split(new[] { '=' }, 2, StringSplitOptions.RemoveEmptyEntries)) .GroupBy(parts => parts[0], JoinParts) .ToDictionary(grouping => grouping.Key, grouping => new WireMockList(grouping.SelectMany(x => x))); } diff --git a/test/WireMock.Net.Tests/Util/QueryStringParserTests.cs b/test/WireMock.Net.Tests/Util/QueryStringParserTests.cs index ca547d98..10f06554 100644 --- a/test/WireMock.Net.Tests/Util/QueryStringParserTests.cs +++ b/test/WireMock.Net.Tests/Util/QueryStringParserTests.cs @@ -146,6 +146,20 @@ namespace WireMock.Net.Tests.Util result["key"].Should().Equal(new WireMockList("value=what")); } + [Fact] + public void Parse_With1ParamWithTwoEqualSigns() + { + // Assign + string query = "?key=value==what"; + + // Act + var result = QueryStringParser.Parse(query); + + // Assert + result.Count.Should().Be(1); + result["key"].Should().Equal(new WireMockList("value==what")); + } + [Fact] public void Parse_WithMultipleParamWithSameKeySeparatedBySemiColon() {