2017-03-12 3 views
0

.net Core 1.1.1을 사용하는 응용 프로그램에서 눈치 챘습니다. 현재 사용자가 태그 도우미에서 관리 역할의 구성원인지 확인해야합니다. 문자열을 isAdmin = await userManager.IsInRoleAsync(currentUser, "admin") 주석 내가 가진 예외를두면.net core IsInRoleAsync 'System.ObjectDisposedException'

public override async void Process(TagHelperContext context, TagHelperOutput output) 
    { 
    currentUser = await userManager.GetUserAsync(actionContextAccessor.ActionContext.HttpContext.User); 
     isAdmin = await userManager.IsInRoleAsync(currentUser, "admin"); 
    } 

: 다음 TagHelper의 생성자는

public MyTagHelper(UserManager<User> UserManager, IActionContextAccessor ActionContextAccessor) 
    { 
     userManager = UserManager; 
     actionContextAccessor = ActionContextAccessor;    
    } 

다음 프로세스 메소드를 오버라이드 (override)는 " 'System.ObjectDisposedException가'시스템에서 발생 유형의 처리되지 않은 예외입니다. Private.CoreLib.ni.dll "

이유를 이해할 수 없습니다. 도움 주셔서 감사합니다.

답변

0

프로세스는 동기 메서드이며 비동기 void로 만드는 것은 함수가 완료 될 때까지 기다리지 않는다는 것을 의미합니다. 대신 ProcessAsync를 재정 의하여 작업을 반환해야합니다. 시도해보십시오.

public override async Task ProcessAsync(TagHelperContext context, TagHelperOutput output) 
{ 
    currentUser = await userManager.GetUserAsync(actionContextAccessor.ActionContext.HttpContext.User); 
    isAdmin = await userManager.IsInRoleAsync(currentUser, "admin"); 
} 
+0

감사합니다. 그것은 작동합니다. – gikerix

+0

당신은 환영합니다. 그러나 여기있는 사람에게 감사하는 가장 좋은 방법은 대답을 수락하고 그것을 upvote하는 것입니다. (내 대답의 왼쪽에있는 녹색 화살표와 위쪽 화살표를 클릭하십시오) –