2017-02-21 3 views
0

現在ログインしているユーザーを取得し、操作のために正しいクラスにキャストしようとしています。私は私のIndexメソッドでこのメソッドを呼び出す現在ログインしているApplicationUserがUserManager GetUserAsyncメソッドでヌルとして返されました

private async void GetCurrentUser() 
{ 
    _currentCursist = (Cursist) await _userManager.GetUserAsync(HttpContext.User); 
} 

public IActionResult Index() 
{ 
    GetCurrentUser(); 
    if (_currentCursist == null) 
    { 
     return View("~/Views/Error/DefaultError.cshtml"); 
    } 
    return View(); 
} 

_currentCursist値は常にnullになります私のコントローラクラスで

私は、次のコードを持っています。私はいくつかの異なる方法を試しましたが、常にnull値になります。なぜこうなった?

httpContext.User値は、現在のユーザが移入及び_userManagerは、ログインユーザが含まれています。どうにかしてGetUserAsyncメソッドを使用するときに私にユーザーを与えていないのですか?

+0

メソッドを非同期にしないようにしましたか?私は確信していませんが、私はvoidメソッドが動作する必要はありませんと思う –

+0

@FrancescoRoggia私は非同期を削除しようとしましたが、エラーが発生し、非同期を使用するように指示します。しかし、タスクの戻り値を持つ非同期メソッドを持つことをお勧めします。 – Tumladhir

答えて

-2

私は非同期メソッドの詳細を見つけました。メソッドasync voidを避けることが重要です。

private async Task GetCurrentUser() 
{ 
    _currentCursist = (Cursist) await _userManager.GetUserAsync(HttpContext.User); 
} 

と、次のメソッド呼び出しを使用::私は応答を待っていなかったので、私は、null値を得ていたかなり確信している

GetCurrentUser().Wait(); 

を私は次のように私の方法を変更しました。 async taskを使用することで、実行を遅らせることができました。その結果、アクティブなユーザーが返されました。

関連する問題