diff --git a/src/Microsoft.AspNet.WebUtilities/QueryBuilder.cs b/src/Microsoft.AspNet.WebUtilities/QueryBuilder.cs index a719db536d..28cdfa85fe 100644 --- a/src/Microsoft.AspNet.WebUtilities/QueryBuilder.cs +++ b/src/Microsoft.AspNet.WebUtilities/QueryBuilder.cs @@ -14,16 +14,24 @@ namespace Microsoft.AspNet.WebUtilities { private IList> _params; - public QueryBuilder() - { + public QueryBuilder() + { _params = new List>(); - } + } public QueryBuilder(IEnumerable> parameters) { _params = new List>(parameters); } + public void Add(string key, IEnumerable values) + { + foreach (var value in values) + { + _params.Add(new KeyValuePair(key, value)); + } + } + public void Add(string key, string value) { _params.Add(new KeyValuePair(key, value)); diff --git a/test/Microsoft.AspNet.WebUtilities.Tests/QueryBuilderTests.cs b/test/Microsoft.AspNet.WebUtilities.Tests/QueryBuilderTests.cs index 2de60d8a46..76d3ac977d 100644 --- a/test/Microsoft.AspNet.WebUtilities.Tests/QueryBuilderTests.cs +++ b/test/Microsoft.AspNet.WebUtilities.Tests/QueryBuilderTests.cs @@ -50,6 +50,14 @@ namespace Microsoft.AspNet.WebUtilities Assert.Equal("?key1=value1&key2=value2&key3=value3", builder.ToString()); } + [Fact] + public void AddIEnumerableValues_AddedInOrder() + { + var builder = new QueryBuilder(); + builder.Add("key", new[] { "value1", "value2", "value3" }); + Assert.Equal("?key=value1&key=value2&key=value3", builder.ToString()); + } + [Fact] public void AddMultipleValuesViaConstructor_AddedInOrder() { @@ -73,5 +81,18 @@ namespace Microsoft.AspNet.WebUtilities }; Assert.Equal("?key1=value1&key2=value2&key3=value3", builder.ToString()); } + + [Fact] + public void CopyViaConstructor_AddedInOrder() + { + var builder = new QueryBuilder() + { + { "key1", "value1" }, + { "key2", "value2" }, + { "key3", "value3" }, + }; + var builder1 = new QueryBuilder(builder); + Assert.Equal("?key1=value1&key2=value2&key3=value3", builder1.ToString()); + } } } \ No newline at end of file