WebRequest работает, но HttpClient не работает - PullRequest
0 голосов
/ 18 марта 2020

У меня есть внутренний API, который мне нужен, чтобы получить токен. Однако, когда я попробовал метод HttpClient, он не работает, что бы я ни пытался. Я получаю запрос 400 BAD. Вот полный код метода HttpClient:

HttpClient client = new HttpClient();
var request = new HttpRequestMessage()
{
    RequestUri = new Uri(tokenUrI),
    Method = HttpMethod.Post,
    Headers =
    {
        {HttpRequestHeader.Authorization.ToString(), "Basic "+Convert.ToBase64String(byteArray) },
        {HttpRequestHeader.Accept.ToString(), "application/x-www-form-urlencoded" }
    }
};

var response = client.SendAsync(request).Result;

Я также попробовал другую версию метода HttpClient:

HttpClient client = new HttpClient();
    client.DefaultRequestHeaders.Authorization = new AuthenticationHeaderValue("Basic", Convert.ToBase64String(byteArray));
    client.DefaultRequestHeaders.Accept.Add(new MediaTypeWithQualityHeaderValue("application/x-www-form-urlencoded"));
    HttpResponseMessage response = await client.PostAsync(tokenUrI.ToString(), null);

, и это также дает запрос 400 BAD.

Однако следующее использование WebMethod работает и дает правильный ответ:

var webRequest = WebRequest.Create(tokenUrI);
string response = null;
if (webRequest != null)
{
    webRequest.Method = "POST";
    webRequest.Timeout = 20000;
    webRequest.ContentType = "application/x-www-form-urlencoded";
    webRequest.Headers.Add("Authorization", "Basic " + Convert.ToBase64String(byteArray));

    using (Stream s = webRequest.GetResponse().GetResponseStream())
    {
        using (StreamReader sr = new StreamReader(s))
        {
            response = sr.ReadToEnd();
        }
    }
}

var responseObject = JsonConvert.DeserializeObject<TokenResponse>(response);

Так почему же работает webRequest, а HttpClient не работает? Я считаю, что с отправляемым запросом что-то не так. Как я могу использовать HttpClient?

...