获取具体用户对应的User Roles

Get User Roles coresponding to concrete user

如何将 Task<IList<string>> 解压为 List 或其他?我正在寻找一种获取用户 Role 的方法(一个用户只有一个 Role 但从这个查询中我得到 Task 列表,但我无法从中获取该角色。如何处理?

我的查询:

var appUser = this.userManager.Users.SingleOrDefault(r => r.UserName == model.UserName);
var appUserRoles = this.userManager.GetRolesAsync(appUser); //Here i get List of task

和完整方法

[HttpPost("Login")]
    public async Task<object> Login([FromBody] LoginBindingModel model)
    {
        var result = await this.signInManager.PasswordSignInAsync(model.UserName, model.Password, false, false);

        if (result.Succeeded)
        {
            var appUser = this.userManager.Users.SingleOrDefault(r => r.UserName == model.UserName);
            var appUserRoles = this.userManager.GetRolesAsync(appUser);

            var bearerToken = await this.GenerateJwtToken(model.UserName, appUser);

            return this.Ok(new AccountViewModel
            {
                //model
            });
        }

        return this.Unauthorized();
    }

或者有没有办法让 Login 而不是 asyncIdentity Core 中的字节有同步管理器方法。

您可以使用 await :

 var appUserRoles =await this.userManager.GetRolesAsync(appUser);

在调用所有用 Task 装饰的方法之前放置一个 await,为此你可以使用这样的东西:

 var userRoles =await this.userManager.GetRolesAsync(appUser);

这 returns 中的所有角色 List<T>,或者您可以使用 Result ,例如:

var userRoles =this.userManager.GetRolesAsync(appUser).Result;

现在你有一个角色列表,你可以 enumerate 他们并选择你想要的

var role=userRoles.Where(r=>r.name=='admin') ; // example