遍历异步任务以更新用户角色

时间:2019-04-18 15:55:41

标签: c# entity-framework asp.net-core

我正在为我的C.R.U.D应用程序编写一个Edit方法,但是我一直在更新用户角色。我试图遍历用户角色并分配用户角色,但尚未分配角色。我收到一条错误消息,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 个答案:

答案 0 :(得分:1)

GetRolesAsync返回一个Task,它代表异步操作,其中包含角色名称列表。因此,您无法使用foreach直接对其进行迭代。您应该使用await关键字等待结果,然后进行迭代。示例:var AllUserRoles = await _userManager.GetRolesAsync(user);

您可以查看here GetRolesAsync方法的详细信息。