2017-02-21 59 views
0

我想获取当前登录用户并将其转换为正确的类进行操作。当前登录的ApplicationUser返回为null与UserManager GetUserAsync方法

在我的控制器类,我有以下代码:

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

我在Index方法调用此方法:

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

的_currentCursist值将始终为空。我尝试了几种不同的方式,但总是会导致空值。这是为什么发生?

httpContext.User值由当前用户填充,并且_userManager包含登录的用户。不知何故,当使用GetUserAsync方法时,它不会给我用户?

+0

你有没有尝试不使方法异步?我不确定,但我认为无效的方法并不需要它们的工作 –

+0

@FrancescoRoggia我试着去除异步,但它会产生一个错误,并告诉我使用异步。然而,它倾向于使用任务返回的异步方法。 – Tumladhir

回答

-2

我发现了更多关于异步方法的信息。避免async void方法很重要。我改变了我的方法如下:

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

,并使用下面的方法调用:

GetCurrentUser().Wait(); 

我敢肯定,我得到一个空值,因为我没有等待响应。通过使用async task,我能够延迟执行,导致活动用户返回。