Как предотвратить двойное кодирование строки запроса httpclient? - PullRequest
0 голосов
/ 11 мая 2018

У меня есть строка запроса с символами Юникода, например."http://api.test.com?q=Túls Engeniería".

Я отправляю эту строку запроса в запросе get, метод BuildUrl возвращает закодированную строку - httpclient.GetAsync("http://api.test.com?q=T%u00fals+Engenier%u00eda"), но в запросе, который я вижу в запросе fiddler, кодируется дополнительно - "http://api.test.com?q=T%25u00fals+Engenier%25u00eda ", Как я могу предотвратить это двойное кодирование?

private async Task<string> MakeGetCall(string apiVersion, string url, string accessToken, NameValueCollection urlParameters = null)
{
    var client = GetHttpClient();
    client.DefaultRequestHeaders.Authorization = new AuthenticationHeaderValue(Constants.AUTHORIZATION_HEADER_VALUE_CONST_PART, accessToken);

    var result = await client.GetAsync(BuildUrl(apiVersion + url, urlParameters));
    result.EnsureSuccess();

    return await result.Content.ReadAsStringAsync();
}

private string BuildUrl(string baseUrl, NameValueCollection urlParameters)
{
    string finalUrl = baseUrl;

     if (urlParameters != null)
     {
         var builder = new UriBuilder(string.Empty, baseUrl);
         var query = HttpUtility.ParseQueryString(builder.Query);

         query.Add(urlParameters);

         builder.Query = query.ToString();
         finalUrl = builder.ToString();
     }

     return finalUrl;
 }
...