无法在Windows Phone 8.1中保存RestSharp OAuth请求的token

4

我正在使用RestSharp从Trello获取请求令牌。仅在请求线程中获取到令牌,但无法将其保存在我的应用程序变量中。以下是一些代码:

    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
    }

你有什么想法吗?

1个回答

4
解决这个问题的方法是创建一个类,使我能够创建同步请求。以下是该类的代码:
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(response)方法后,我在我的应用程序类中拥有了令牌和令牌密钥。我仍然相信这个问题一定有更好的解决方案,但这是我所知道的唯一解决方案。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接