C# Не передает запрос httpClient.SendAsync(request)
Передаю post запрос по api На строке передачи запроса сервер не отвечает. Возможно, ошибка в коде - не передается запрос?
private async Task<TokenClass> GetToken(string clientID, string clientSecret)
{
HttpClient httpClient = new HttpClient();
HttpRequestMessage request = new HttpRequestMessage();
request.RequestUri = new Uri(Host + "/api/client/token");//https://performance.ozon.ru/api/client/token
request.Method = HttpMethod.Post;
request.Headers.TryAddWithoutValidation("Accept", "application/json");
request.Content = new StringContent("{\"client_id\":\"[скрыл]@advertising.performance.ozon.ru\",\"client_secret\":\"[скрыл]\",\"grant_type\":\"client_credentials\"}", Encoding.UTF8, "application/json");
HttpResponseMessage response = await httpClient.SendAsync(request);//почему-то при вызове метода программа зависает. Видимо, нет запроса
if (response.StatusCode != HttpStatusCode.OK)
{
MessageBox.Show(response.StatusCode.ToString());
return null;
}
return await response.Content.ReadAsAsync<TokenClass>();
}
Ответы (1 шт):
Автор решения: Андрей Тахтеев
→ Ссылка
А ларчик просто открывался. Никаких исключений, ответов не ловил. Просто все зависало на строчке кода:
HttpResponseMessage response = await httpClient.SendAsync(request);//почему-то при вызове метода программа зависает. Видимо, нет запроса
Запрос при этом был отправлен не верно. Верно следующее:
HttpResponseMessage response = httpClient.PostAsync(Host + "/api/client/token", request.Content).Result;
То есть я пытался отправить не Post запрос. Скидываю полный верный вариант метода:
private async Task<TokenClass> GetToken(string clientID, string clientSecret)
{
TokenClass token = null;
try
{
HttpClient httpClient = new HttpClient();//
HttpRequestMessage request = new HttpRequestMessage();//
request.RequestUri = new Uri(Host + "/api/client/token");//https://performance.ozon.ru/api/client/token
request.Method = HttpMethod.Post;
//request.Headers.Add("client_id", clientID);
//request.Headers.Add("client_secret", clientSecret);
//request.Headers.Add("grant_type", "client_credentials");
request.Headers.TryAddWithoutValidation("Accept", "application/json");
request.Content = new StringContent("{\"client_id\":\"" + clientID + "\",\"client_secret\":\"" + clientSecret + "\",\"grant_type\":\"client_credentials\"}", Encoding.UTF8, "application/json");
HttpResponseMessage response = httpClient.PostAsync(Host + "/api/client/token", request.Content).Result;
MessageBox.Show(request.ToString());
if (response.StatusCode != HttpStatusCode.OK)
{
MessageBox.Show(response.StatusCode.ToString());
return null;
}
token = await response.Content.ReadAsAsync<TokenClass>();
MessageBox.Show(String.Format("Токен будет работать {0} секунд = {1} минут.", token.expires_in.ToString(), token.expires_in / 60));
return token;
}
catch (Exception ex)
{
MessageBox.Show("Ошибка получения токена. "+ex.Message);
return null;
}
}