2017-02-21 5 views
0

현재 로그인 한 사용자를 얻고 조작을 위해 올바른 클래스로 캐스팅하려고합니다. 내 색인 방법이 메서드를 호출현재 로그인 한 UserUser가 UserManager GetUserAsync 메서드로 null로 반환되었습니다.

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

메서드를 비동기 적으로 만들지 않으려 고 시도 했습니까? 확실하지는 않지만 무효 메서드는 작동하지 않아도됩니다. –

+0

@FrancescoRoggia 비동기 제거를 시도했지만 오류가 발생하여 비동기 사용을 지시합니다. 그러나 Task 리턴을 사용하여 비동기 메소드를 갖는 것이 더 좋습니다. – Tumladhir

답변

-2

비동기 메소드에 대한 추가 정보를 찾았습니다. 방법을 피하는 것이 중요합니다 async void. 나는 다음에 내 방법 변경 :

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

을하고 다음 메서드 호출을 사용 :

GetCurrentUser().Wait(); 

내가 응답을 기다리고되지 않았기 때문에 내가 널 값을지고 있다고 확신합니다. async task을 사용하면 실행을 지연시킬 수 있으므로 활성 사용자가 반환됩니다.