diff --git a/CryptoExchange.Net/Clients/BaseRestClient.cs b/CryptoExchange.Net/Clients/BaseRestClient.cs index e112bea..513ea8c 100644 --- a/CryptoExchange.Net/Clients/BaseRestClient.cs +++ b/CryptoExchange.Net/Clients/BaseRestClient.cs @@ -341,7 +341,7 @@ namespace CryptoExchange.Net } // Add the auth parameters to the uri, start with a new URI to be able to sort the parameters including the auth parameters - uri = uri.SetParameters(uriParameters); + uri = uri.SetParameters(uriParameters, arraySerialization); var request = RequestFactory.Create(method, uri, requestId); request.Accept = Constants.JsonContentHeader; diff --git a/CryptoExchange.Net/ExtensionMethods.cs b/CryptoExchange.Net/ExtensionMethods.cs index 6779087..8037ede 100644 --- a/CryptoExchange.Net/ExtensionMethods.cs +++ b/CryptoExchange.Net/ExtensionMethods.cs @@ -1,4 +1,5 @@ using System; +using System.Collections; using System.Collections.Generic; using System.Diagnostics; using System.Linq; @@ -419,8 +420,9 @@ namespace CryptoExchange.Net /// /// /// + /// /// - public static Uri SetParameters(this Uri baseUri, SortedDictionary parameters) + public static Uri SetParameters(this Uri baseUri, SortedDictionary parameters, ArrayParametersSerialization arraySerialization) { var uriBuilder = new UriBuilder(); uriBuilder.Scheme = baseUri.Scheme; @@ -428,7 +430,15 @@ namespace CryptoExchange.Net uriBuilder.Path = baseUri.AbsolutePath; var httpValueCollection = HttpUtility.ParseQueryString(string.Empty); foreach (var parameter in parameters) - httpValueCollection.Add(parameter.Key, parameter.Value.ToString()); + { + if(parameter.Value.GetType().IsArray) + { + foreach (var item in (object[])parameter.Value) + httpValueCollection.Add(arraySerialization == ArrayParametersSerialization.Array ? parameter.Key + "[]" : parameter.Key, item.ToString()); + } + else + httpValueCollection.Add(parameter.Key, parameter.Value.ToString()); + } uriBuilder.Query = httpValueCollection.ToString(); return uriBuilder.Uri; } @@ -438,8 +448,9 @@ namespace CryptoExchange.Net /// /// /// + /// /// - public static Uri SetParameters(this Uri baseUri, IOrderedEnumerable> parameters) + public static Uri SetParameters(this Uri baseUri, IOrderedEnumerable> parameters, ArrayParametersSerialization arraySerialization) { var uriBuilder = new UriBuilder(); uriBuilder.Scheme = baseUri.Scheme; @@ -447,7 +458,15 @@ namespace CryptoExchange.Net uriBuilder.Path = baseUri.AbsolutePath; var httpValueCollection = HttpUtility.ParseQueryString(string.Empty); foreach (var parameter in parameters) - httpValueCollection.Add(parameter.Key, parameter.Value.ToString()); + { + if (parameter.Value.GetType().IsArray) + { + foreach (var item in (object[])parameter.Value) + httpValueCollection.Add(arraySerialization == ArrayParametersSerialization.Array ? parameter.Key + "[]" : parameter.Key, item.ToString()); + } + else + httpValueCollection.Add(parameter.Key, parameter.Value.ToString()); + } uriBuilder.Query = httpValueCollection.ToString(); return uriBuilder.Uri; }