首页 > 解决方案 > 迭代异步任务以更新用户角色

问题描述

我正在为我的 CRUD 应用程序编写一个 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);

       }

标签: c#entity-frameworkasp.net-core

解决方案


GetRolesAsync返回一个Task表示异步操作的 a,其中包含角色名称列表。所以你不能直接使用foreach. 您应该使用await关键字来等待结果,然后进行迭代。例子:var AllUserRoles = await _userManager.GetRolesAsync(user);

您可以在此处查看GetRolesAsync方法详细信息。


推荐阅读