Я вызываю следующую функцию, чтобы получить токен доступа для получения профиля пользователя Twitter с помощью REST Api.Метод HttpClient.SendAsync выходит из исключения без исключения
public async Task<string> GetAccessToken()
{
try
{
var httpClient = new HttpClient();
var request = new HttpRequestMessage(HttpMethod.Post, "https://api.twitter.com/oauth2/token ");
var customerInfo = Convert.ToBase64String(new UTF8Encoding().GetBytes(OAuthConsumerKey + ":" + OAuthConsumerSecret));
request.Headers.Add("Authorization", "Basic " + customerInfo);
request.Content = new StringContent("grant_type=client_credentials", Encoding.UTF8, "application/x-www-form-urlencoded");
//program exits at this point
HttpResponseMessage response = await httpClient.SendAsync(request).ConfigureAwait(false);
string json = await response.Content.ReadAsStringAsync();
var serializer = new JavaScriptSerializer();
dynamic item = serializer.Deserialize<object>(json);
return item["access_token"];
}
catch (Exception ex)
{
MessageBox.Show("In Retrieving access token : " + ex.ToString());
}
}
выхода из программы/завершается без получения ответа в точке HttpResponseMessage response = await httpClient.SendAsync(request).ConfigureAwait(false);
называется.
Это родительская функция, которая вызывает GetAccessToken()
public async Task getUserProfile(string userName)
{
try
{
if (accessToken == null)
{
accessToken = await GetAccessToken().ConfigureAwait(false);
}
var request = new HttpRequestMessage(HttpMethod.Get, string.Format(" https://api.twitter.com/1.1/users/show.json?screen_name={0}", userName));
request.Headers.Add("Authorization", "Bearer " + accessToken);
var httpClient = new HttpClient();
HttpResponseMessage response = await httpClient.SendAsync(request).ConfigureAwait(false);
var jsonString = await response.Content.ReadAsStringAsync();
var serializer = new JavaScriptSerializer();
dynamic jsonObj = serializer.Deserialize<object>(jsonString);
}
catch (Exception ex)
{
if (DEBUG)
{
MessageBox.Show("In Retrieving user profile from twitter : " + ex.ToString());
}
}
}
Я не может поймать исключение, почему программа выходит на GetAccessToken() или getUserProfile(). Но код выполняется успешно и получает HttpResponseMessage, если getUserProfile() имеет Task<IEnumerable<string>>
как возвращаемый тип. Почему эта проблема возникает? Как можно исключить исключение?
Как вы сказали, что ваш метод является асинхронным ... Исключение происходит, когда задача будет выполнена/завершена. Вам нужно использовать метод async или нет? – mtheriault
Можете ли вы показать код, вызывающий 'getUserProfile'? Что это за приложение? –
Вам интересно, почему вы используете JavaScriptSerializer? Microsoft [documentation] (https://msdn.microsoft.com/en-us/library/system.web.script.serialization.javascriptserializer), в котором говорится: «Json.NET следует использовать для сериализации и десериализации. и десериализации для приложений с поддержкой AJAX. " – sellotape