使用UserManager GetUserAsync方法

时间:2017-02-21 09:03:24

标签: asp.net asp.net-mvc asp.net-identity identity

我正在尝试获取当前登录的用户并将其转换为正确的类进行操作。

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

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值始终为null。我尝试了几种不同的方法,但它总是导致空值。为什么会这样?

httpContext.User值填充当前用户,_userManager包含登录用户。不知何故,在使用GetUserAsync方法时,它没有给我这个用​​户?

1 个答案:

答案 0 :(得分:-3)

我找到了有关异步方法的更多信息。避免async void方法很重要。我将方法改为:

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

并使用以下方法调用:

GetCurrentUser().Wait();

我很确定我得到一个空值,因为我没有等待响应。通过使用async task我可以延迟执行,从而导致活动用户返回。