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! } }