Ваш код содержит более одной ошибки.
Вы видели HttpClient
документацию? Знаете ли вы о IDisposable
? Знаете ли вы, что набор KeyValuePair
равен Dictionary
?
Не используйте ключевое слово var
, если вы не совсем уверены, что делаете. var
может скрыть от вас исходную проблему, и ваш вопрос - это пример того, как var
убивает ваше время. Я рекомендую использовать явные типы, где это возможно.
И да, как указано выше в комментариях, вы должны развернуть string
результат из awaitable Task
с await
.
private static readonly HttpClient client = new HttpClient();
private static async Task<string> GetResponseStringAsync(string url, Dictionary<string, string> formData)
{
using (HttpContent content = new FormUrlEncodedContent(formData))
using (HttpResponseMessage response = await client.PostAsync(url, content))
{
response.EnsureSuccessStatusCode();
return await response.Content.ReadAsStringAsync();
}
}
Использование
Dictionary<string, string> postData = new Dictionary<string, string>();
postData.Add("client_id", "some_id");
postData.Add("client_secret", "some_secret");
postData.Add("refresh_token", refreshToken);
postData.Add("grant_type", "refresh_token");
try
{
string result = await GetResponseStringAsync("https://www.strava.com/oauth/token", postData);
// success here
}
catch (Exception ex)
{
Debug.WriteLine(ex.Message);
// request failed
}
И наконец, время сказать привет Асинхронному программированию . :)