Итерация асинхронной задачи для обновления роли пользователя - PullRequest
0 голосов
/ 18 апреля 2019

Я пишу метод Edit для моего приложения C.R.U.D, но я застрял с обновлением роли пользователя. Я пытаюсь перебрать роли пользователя и назначить ему роль, которой еще не назначена роль. Я получаю сообщение об ошибке: foreach cannot operate on variables of type 'Task<IList<string>>' because 'Task<IList<string>>' does not contain a public instance definition for 'GetEnumerator' Как я могу это исправить? ИЛИ Как лучше подойти к этому?

[HttpPost]
        public async Task<IActionResult>  Edit(EditUserViewModel editUserViewModel)
        {
            var user = _userManager.Users.Where(e => e.Id == editUserViewModel.id).SingleOrDefault();

            user.FirstName = editUserViewModel.FirstName;
            user.LastName = editUserViewModel.LastName;
            user.MiddleName = editUserViewModel.MiddleName;
            user.Dob = editUserViewModel.Dob;

            var AllUserRoles = _userManager.GetRolesAsync(user);

            foreach(var userRole in AllUserRoles)
            {
                if (userRole != editUserViewModel.RoleToBeAssigned)
                {
                    await _userManager.AddToRoleAsync(user, editUserViewModel.RoleToBeAssigned);    
                }
            }

            await _userManager.UpdateAsync(user);
            return View(user);

       }

1 Ответ

1 голос
/ 18 апреля 2019

GetRolesAsync возвращает Task, представляющий асинхронную операцию, содержащую список имен ролей.Так что вы не можете напрямую повторить это, используя foreach.Вы должны использовать ключевое слово await, чтобы дождаться результата и затем повторить.Пример: var AllUserRoles = await _userManager.GetRolesAsync(user);

Вы можете увидеть здесь подробности GetRolesAsync метода.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...