获取与具体用户对应的用户角色

问题描述 投票:0回答:2

如何解压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中,有一些同步的管理者方法。

c# asp.net-web-api asp.net-core asp.net-identity asp.net-core-2.1
2个回答
1
投票

你可以使用await

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

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
© www.soinside.com 2019 - 2024. All rights reserved.