Skip to content

Commit

Permalink
Handle empty array in AddQueryStringParameter.
Browse files Browse the repository at this point in the history
Resolve #7298
  • Loading branch information
maliming committed Jan 18, 2021
1 parent 9d10542 commit dc11977
Showing 1 changed file with 22 additions and 13 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -8,7 +8,6 @@
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
{
Expand Down Expand Up @@ -82,9 +81,10 @@ private static void AddQueryStringParameters(StringBuilder urlBuilder, IList<Par
continue;
}

AddQueryStringParameter(urlBuilder, isFirstParam, queryStringParameter.Name, value);

isFirstParam = false;
if (AddQueryStringParameter(urlBuilder, isFirstParam, queryStringParameter.Name, value))
{
isFirstParam = false;
}
}

if (apiVersion.ShouldSendInQueryString())
Expand All @@ -93,28 +93,37 @@ private static void AddQueryStringParameters(StringBuilder urlBuilder, IList<Par
}
}

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)
Expand Down

0 comments on commit dc11977

Please sign in to comment.