private static void AddQueryStringParameters(StringBuilder urlBuilder, IList <ParameterApiDescriptionModel> actionParameters, IReadOnlyDictionary <string, object> methodArguments, ApiVersionInfo apiVersion)
        {
            var queryStringParameters = actionParameters
                                        .Where(p => p.BindingSourceId.IsIn(ParameterBindingSources.ModelBinding, ParameterBindingSources.Query))
                                        .ToArray();

            var isFirstParam = true;

            foreach (var queryStringParameter in queryStringParameters)
            {
                var value = HttpActionParameterHelper.FindParameterValue(methodArguments, queryStringParameter);
                if (value == null)
                {
                    continue;
                }

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

            if (apiVersion.ShouldSendInQueryString())
            {
                AddQueryStringParameter(urlBuilder, isFirstParam, "api-version", apiVersion.Version);  //TODO: Constant!
            }
        }
    protected virtual async Task AddQueryStringParametersAsync(StringBuilder urlBuilder, ActionApiDescriptionModel action, IReadOnlyDictionary <string, object> methodArguments, ApiVersionInfo apiVersion)
    {
        var queryStringParameters = action.Parameters
                                    .Where(p => p.BindingSourceId.IsIn(ParameterBindingSources.ModelBinding, ParameterBindingSources.Query))
                                    .ToArray();

        var isFirstParam = true;

        foreach (var queryStringParameter in queryStringParameters)
        {
            var value = HttpActionParameterHelper.FindParameterValue(methodArguments, queryStringParameter);
            if (value == null)
            {
                continue;
            }

            if (HttpClientProxyingOptions.QueryStringConverts.ContainsKey(value.GetType()))
            {
                using (var scope = ServiceScopeFactory.CreateScope())
                {
                    var queryString = await(Task <string>) CallObjectToQueryStringAsyncMethod
                                      .MakeGenericMethod(value.GetType())
                                      .Invoke(this, new object[]
                    {
                        scope.ServiceProvider.GetRequiredService(HttpClientProxyingOptions.QueryStringConverts[value.GetType()]),
                        action,
                        queryStringParameter,
                        value
                    });

                    if (queryString != null)
                    {
                        urlBuilder.Append(isFirstParam ? "?" : "&");
                        urlBuilder.Append(queryString);
                        isFirstParam = false;
                        continue;
                    }
                }
            }

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

        if (apiVersion.ShouldSendInQueryString())
        {
            await AddQueryStringParameterAsync(urlBuilder, isFirstParam, "api-version", apiVersion.Version);  //TODO: Constant!
        }
    }