2016-05-06 2 views
0

ここにコードがあります -httpclientを待っています

バージョン3:r.resultを削除してもまだ動作しません。

protected async void LogIn(LoginInfo _credentials) 
{ 
    HttpResponseMessage r = await DoLogin("demo", "Abc123$"); 

    if (r.IsSuccessStatusCode) 
    { 
     AccountAccess aa = new AccountAccess(); 

      var x = await r.Content.ReadAsStringAsync(); 

      aa = JsonConvert.DeserializeObject<AccountAccess>(x); 
      Application.Current.Properties["access_token"] = aa.access_token; 

    } 
    else //if (lr == LoginResult.LoginRes.NoAuth) 
    { 
     Alert("Alert", "Username/password combination is incorrect", "OK"); 
    } 
} 

private async Task<HttpResponseMessage> DoLogin(string username, string password) 
{ 
    HttpClient client = new HttpClient(); 
    client.BaseAddress = new Uri(Constants.LOGINURL); 

    var response = await client.PostAsync("Token", new StringContent("grant_type=password&username=" + username + "&password=" + password, Encoding.UTF8)); 

    return response; 
} 

ユーザー名とパスワードを投稿してトークンを取得する呼び出しは返されません。

私は間違ったことをしていますか?

+0

あなたのメソッドはすでに非同期であるため、 'Task.Run()'の使用はありません。 – SLaks

+0

タスク PerformLogin()非同期代わり 'パブリックこの方法を試し {VARのR =待つDoLogin(_username、_password))。 (r.Result.IsSuccessStatusCode)場合は、他の { リターン "いいえ認証" {// は成功のもの を行います}; } 「OK」を返します。 } ' –

答えて

1

あなたはUIスレッドでタスク上でブロックするr.Resultにアクセスしています。
内部でawaitがUIスレッドで再開しようとするため、デッドロックが発生します。

代わりにawaitが必要です。

+0

これを再構成してr.Resultを削除しましたが、それでも動作しません。上記の私の更新を参照してください。 – duckmike

+0

なぜですか?何が起こるのですか?あなたは何をした? – SLaks

+0

私の変更は上です..私はaa = JsonConvert.DeserializeObject ... aaが空であることを証明することができます – duckmike

関連する問題