diff --git a/sdk/src/Core/Amazon.Runtime/ParameterCollection.cs b/sdk/src/Core/Amazon.Runtime/ParameterCollection.cs index 5e7e678c244e..f1b82d285794 100644 --- a/sdk/src/Core/Amazon.Runtime/ParameterCollection.cs +++ b/sdk/src/Core/Amazon.Runtime/ParameterCollection.cs @@ -77,7 +77,7 @@ public List> GetSortedParametersList() return GetParametersEnumerable().ToList(); } - private IEnumerable> GetParametersEnumerable() + internal IEnumerable> GetParametersEnumerable() { foreach (var kvp in this) { diff --git a/sdk/src/Core/Amazon.Util/AWSSDKUtils.cs b/sdk/src/Core/Amazon.Util/AWSSDKUtils.cs index 9e45563d1ee6..a9011bff0fde 100644 --- a/sdk/src/Core/Amazon.Util/AWSSDKUtils.cs +++ b/sdk/src/Core/Amazon.Util/AWSSDKUtils.cs @@ -302,26 +302,20 @@ public static byte[] GetRequestPayloadBytes(IRequest request, bool? usesQueryStr */ internal static string GetParametersAsString(ParameterCollection parameterCollection) { - var sortedParameters = parameterCollection.GetSortedParametersList(); - - StringBuilder data = new StringBuilder(512); - foreach (var kvp in sortedParameters) + var parameterBuilder = new ValueStringBuilder(512); + foreach (var kvp in parameterCollection.GetParametersEnumerable()) { - var key = kvp.Key; var value = kvp.Value; - if (value != null) - { - data.Append(key); - data.Append('='); - data.Append(AWSSDKUtils.UrlEncode(value, false)); - data.Append('&'); - } + if (value == null) + continue; + parameterBuilder.Append(kvp.Key); + parameterBuilder.Append('='); + parameterBuilder.Append(AWSSDKUtils.UrlEncode(value, false)); + parameterBuilder.Append('&'); } - string result = data.ToString(); - if (result.Length == 0) - return string.Empty; - return result.Remove(result.Length - 1); + var length = parameterBuilder.Length; + return length == 0 ? string.Empty : parameterBuilder.ToString(0, length - 1); } /// diff --git a/sdk/test/NetStandard/UnitTests/Core/AWSSDKUtilsTests.cs b/sdk/test/NetStandard/UnitTests/Core/AWSSDKUtilsTests.cs index 1513b21f6920..4e1f82a08b03 100644 --- a/sdk/test/NetStandard/UnitTests/Core/AWSSDKUtilsTests.cs +++ b/sdk/test/NetStandard/UnitTests/Core/AWSSDKUtilsTests.cs @@ -1,5 +1,7 @@ -using Amazon.Util; +using System.Collections.Generic; +using Amazon.Util; using System.Text; +using Amazon.Runtime.Internal; using Xunit; namespace UnitTests.NetStandard.Core @@ -7,6 +9,22 @@ namespace UnitTests.NetStandard.Core [Trait("Category", "Core")] public class AWSSDKUtilsTests { + [Fact] + public void GetParametersAsString() + { + var parameters = new ParameterCollection + { + { "key1", "value1" }, + { "key2", "value2" }, + { "key3", new List { "value3", "value4" } }, + { "key4", new List { 1.1, 2.1 } } + }; + + var parametersString = AWSSDKUtils.GetParametersAsString(parameters); + + Assert.Equal("key1=value1&key2=value2&key3=value3&key3=value4&key4=1.1&key4=2.1", parametersString); + } + [Fact] public void ToHexUppercase() {