c# - 迭代异步任务以更新用户角色
问题描述
我正在为我的 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);
}
解决方案
GetRolesAsync
返回一个Task
表示异步操作的 a,其中包含角色名称列表。所以你不能直接使用foreach
. 您应该使用await
关键字来等待结果,然后进行迭代。例子:var AllUserRoles = await _userManager.GetRolesAsync(user);
您可以在此处查看GetRolesAsync
方法详细信息。
推荐阅读
- c++ - 可以在 C 程序中调用 OpenCV 函数吗?
- javascript - 当我尝试在其中添加用户输入时,为什么我的表格单元格是空的?
- javascript - 无论区分大小写或填充,计算相同的单词
- xamarin.forms - 如何更改 Xamarin 表单中的 DatePicker Ok 和 Cancel 按钮文本?
- php - IIS 10 和 Symfony 5 ERR_TOO_MANY_REDIRECTS
- python - 以下 python 代码的输出是什么?
- c - 服务器不接受连接到客户端
- apache-spark - spark-avro 默认禁用 avro 逻辑类型
- linux - 如何从 Oauth2_proxy 登录页面隐藏域
- woocommerce - 相关产品部分的摘录