获取响应于具体用户的用户角色核心

时间:2019-05-01 05:42:38

标签: c# asp.net-web-api asp.net-core asp.net-identity asp.net-core-2.1

如何将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而不是async?在Identity Core中,Byt具有同步管理器方法。

2 个答案:

答案 0 :(得分:1)

您可以使用await

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

答案 1 :(得分:0)

在调用所有用await装饰的方法之前,先放入Task,可以使用以下方法:

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

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

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

现在您有了角色列表,可以enumerate并选择想要的角色

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