diff --git a/CryptoExchange.Net/ExtensionMethods.cs b/CryptoExchange.Net/ExtensionMethods.cs index 6a3ee118..38db8177 100644 --- a/CryptoExchange.Net/ExtensionMethods.cs +++ b/CryptoExchange.Net/ExtensionMethods.cs @@ -146,25 +146,42 @@ namespace CryptoExchange.Net /// public static string ToFormData(this IDictionary parameters) { - var formData = HttpUtility.ParseQueryString(string.Empty); + var result = new StringBuilder(); + var first = true; + + void Append(string key, object value) + { + if (!first) + result.Append('&'); + first = false; + + if (!string.IsNullOrEmpty(key)) + { + result.Append(HttpUtility.UrlEncode(key, Encoding.UTF8)); + result.Append('='); + } + + var text = string.Format(CultureInfo.InvariantCulture, "{0}", value); + result.Append(HttpUtility.UrlEncode(text, Encoding.UTF8)); + } + foreach (var kvp in parameters) { if (kvp.Value is null) continue; - if (kvp.Value.GetType().IsArray) + if (kvp.Value is Array array) { - var array = (Array)kvp.Value; foreach (var value in array) - formData.Add(kvp.Key, string.Format(CultureInfo.InvariantCulture, "{0}", value)); + Append(kvp.Key, value); } else { - formData.Add(kvp.Key, string.Format(CultureInfo.InvariantCulture, "{0}", kvp.Value)); + Append(kvp.Key, kvp.Value); } } - return formData.ToString()!; + return result.ToString(); } ///