2015-03-30 2 views
4

Я пытаюсь получить токен запроса от Trello с RestSharp. Я получил токен только в потоке запроса, но не могу сохранить его в переменной моего приложения. Там какой-то код:Невозможно сохранить токен из запроса RestAharp OAuth Windows Phone 8.1

private async void GetToken() 
    { 

     app.Client.Authenticator = OAuth1Authenticator.ForRequestToken(app.ConsumerKey, app.ConsumerSecret); 
     var request = new RestRequest("OAuthGetRequestToken", Method.POST); 
     app.Client.ExecuteAsync(request, HandleResponse); 

    } 

    private void HandleResponse(IRestResponse restResponse) 
    { 
     var Response = restResponse; 
     MessageBox.Show(Response.Content); 
     QueryString qs = new QueryString(Response.Content); 
     app.OAuthToken = qs["oauth_token"]; 
     app.OAuthTokenSecret = qs["oauth_token_secret"]; 
     app.Verifier = qs["verifier"]; 
     MessageBox.Show(app.OAuthToken);  //got token here, but after 
     MessageBox.Show(app.OAuthTokenSecret); //I don`t have anything in this variables 
    } 

У вас есть идеи?

ответ

3

Решение этой проблемы - создать класс, который позволит мне создать синхронный запрос. Существует код этого класса:

public static class RestClientExtensions 
{ 
    public static Task<IRestResponse> ExecuteTask(this IRestClient client, RestRequest request) 
    { 
     var TaskCompletionSource = new TaskCompletionSource<IRestResponse>(); 
     client.ExecuteAsync(request, (response, asyncHandle) => 
     { 
      if (response.ResponseStatus == ResponseStatus.Error) 
       TaskCompletionSource.SetException(response.ErrorException); 
      else 
       TaskCompletionSource.SetResult(response); 
     }); 
     return TaskCompletionSource.Task; 
    } 
} 

А теперь мой код выглядит следующим образом:

private async void GetToken() 
    { 

     app.Client.Authenticator = OAuth1Authenticator.ForRequestToken(app.ConsumerKey, app.ConsumerSecret); 
     RestRequest request = new RestRequest("OAuthGetRequestToken", Method.POST); 
     IRestResponse restResponse = await app.Client.ExecuteTask(request); 
     HandleResponse(restResponse); 
     GetAccesToken(); 
    } 

    private void HandleResponse(IRestResponse response) 
    { 
     var Response = response; 
     System.Diagnostics.Debug.WriteLine(Response.Content); 
     QueryString qs = new QueryString(Response.Content); 
     app.OAuthToken = qs["oauth_token"]; 
     app.OAuthTokenSecret = qs["oauth_token_secret"]; 
     System.Diagnostics.Debug.WriteLine(app.OAuthToken); 
     System.Diagnostics.Debug.WriteLine(app.OAuthTokenSecret); 
    } 

И после того, как метода HandleResponse (ответ); Выполняется, у меня есть токен и токен в моем классе приложения. Я по-прежнему считаю, что для этой проблемы должно быть лучшее решение, но это единственное, что я знаю.

 Смежные вопросы

  • Нет связанных вопросов^_^