From dc11977a9ce9653561314cf0e86d117390ec6448 Mon Sep 17 00:00:00 2001 From: maliming Date: Mon, 18 Jan 2021 20:29:33 +0800 Subject: [PATCH] Handle empty array in AddQueryStringParameter. Resolve #7298 --- .../Http/Client/DynamicProxying/UrlBuilder.cs | 35 ++++++++++++------- 1 file changed, 22 insertions(+), 13 deletions(-) diff --git a/framework/src/Volo.Abp.Http.Client/Volo/Abp/Http/Client/DynamicProxying/UrlBuilder.cs b/framework/src/Volo.Abp.Http.Client/Volo/Abp/Http/Client/DynamicProxying/UrlBuilder.cs index e4b82b21e1..5bee246bd0 100644 --- a/framework/src/Volo.Abp.Http.Client/Volo/Abp/Http/Client/DynamicProxying/UrlBuilder.cs +++ b/framework/src/Volo.Abp.Http.Client/Volo/Abp/Http/Client/DynamicProxying/UrlBuilder.cs @@ -8,7 +8,6 @@ using JetBrains.Annotations; using Volo.Abp.Http.Modeling; using Volo.Abp.Http.ProxyScripting.Generators; using Volo.Abp.Localization; -using Volo.Abp.Reflection; namespace Volo.Abp.Http.Client.DynamicProxying { @@ -82,9 +81,10 @@ namespace Volo.Abp.Http.Client.DynamicProxying continue; } - AddQueryStringParameter(urlBuilder, isFirstParam, queryStringParameter.Name, value); - - isFirstParam = false; + if (AddQueryStringParameter(urlBuilder, isFirstParam, queryStringParameter.Name, value)) + { + isFirstParam = false; + } } if (apiVersion.ShouldSendInQueryString()) @@ -93,28 +93,37 @@ namespace Volo.Abp.Http.Client.DynamicProxying } } - private static void AddQueryStringParameter( + private static bool AddQueryStringParameter( StringBuilder urlBuilder, bool isFirstParam, string name, [NotNull] object value) { - urlBuilder.Append(isFirstParam ? "?" : "&"); - if (value.GetType().IsArray || (value.GetType().IsGenericType && value is IEnumerable)) { var index = 0; foreach (var item in (IEnumerable) value) { + if (index == 0) + { + urlBuilder.Append(isFirstParam ? "?" : "&"); + } urlBuilder.Append(name + $"[{index++}]=" + System.Net.WebUtility.UrlEncode(ConvertValueToString(item)) + "&"); } - //remove & at the end of the urlBuilder. - urlBuilder.Remove(urlBuilder.Length - 1, 1); - } - else - { - urlBuilder.Append(name + "=" + System.Net.WebUtility.UrlEncode(ConvertValueToString(value))); + + if (index > 0) + { + //remove & at the end of the urlBuilder. + urlBuilder.Remove(urlBuilder.Length - 1, 1); + return true; + } + + return false; } + + urlBuilder.Append(isFirstParam ? "?" : "&"); + urlBuilder.Append(name + "=" + System.Net.WebUtility.UrlEncode(ConvertValueToString(value))); + return true; } private static string ConvertValueToString([NotNull] object value)