.net 核心 IsInRoleAsync 'System.ObjectDisposedException'

.net core IsInRoleAsync 'System.ObjectDisposedException'

我正在研究使用 .net Core 1.1.1 的应用程序 我需要检查当前用户是否是标签助手中管理员角色的成员。 TagHelper 的构造函数是

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

然后覆盖处理方法:

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

如果保留字符串 isAdmin = await userManager.IsInRoleAsync(currentUser, "admin") 未注释 我有例外:"An unhandled exception of type 'System.ObjectDisposedException' occurred in System.Private.CoreLib.ni.dll"

我不明白为什么。 感谢您的帮助。

Process 是一种同步方法,将其设置为 async void 意味着它不会等待您的函数完成。您应该改写 ProcessAsync 和 return 任务。试试这个:

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