2017-02-21 44 views
0

Я пытаюсь получить текущего зарегистрированного пользователя и применить его к правильному классу для манипуляций.Текущий входной файл ApplicationUser возвращен как null с помощью метода UserUnder 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 всегда будет нулевым. Я пробовал несколько разных способов, но всегда приводит к нулевому значению. Почему это происходит?

Значение httpContext.User заполнено текущим пользователем, а _userManager содержит зарегистрированного пользователя. Почему-то это не дает мне пользователя при использовании метода GetUserAsync?

+0

Вы пытались не использовать метод async? Я не уверен, но я думаю, что методы void не нуждаются в них. –

+0

@FrancescoRoggia Я попытался удалить асинхронный процесс, но он будет генерировать ошибку и скажет мне использовать async. Однако он предпочитает использовать метод async с возвратом задачи. – Tumladhir

ответ

-2

Я нашел дополнительную информацию об асинхронных методах. Важно избегать методов async void. Я изменил свой метод на следующее:

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

и используется метод следующий вызов:

GetCurrentUser().Wait(); 

Я уверен, что я получаю нулевое значение, потому что я не ждал ответа. Используя async task, я могу отложить выполнение, что привело к возврату активного пользователя.