Получить пользовательские роли, соответствующие конкретному пользователю - PullRequest
0 голосов
/ 01 мая 2019

Как распаковать 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 есть синхронно менеджеры методов.

Ответы [ 2 ]

1 голос
/ 01 мая 2019

Вы можете использовать await:

 var appUserRoles =await this.userManager.GetRolesAsync(appUser);
0 голосов
/ 01 мая 2019

поставьте 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
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...