У меня есть внутренний 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?