在我的以下操作方法中,我在var result = await _userManager.AddToRoleAsync(user, "AdminRole");
上遵循design time error
。但是,如果我使用var user = new ApplicationUser { UserName = model.SelectedUserName
获取用户,那么上面的行不会给出设计时间错误。正如预期的那样,它给出run time validation error
为:User someUSerName already exist
。我了解运行时间错误是由于我正在向现有用户添加角色,但要传递新实例。问题:如何将现有用户作为应用程序对象作为应用程序,以便我可以将其传递给下面的AddToRoleAsync(....)
?我正在使用ASP.NET Core 1.1.1,单个用户帐户模式,VS2017。
错误:
Cannot convert from Task<MyProj.Model.ApplicationUser> to MyProj.Model.ApplicationUser
控制器
[HttpPost]
[AllowAnonymous]
[ValidateAntiForgeryToken]
public async Task<IActionResult> AddUserToRole(RoleRelatedViewModel model, string returnUrl = null)
{
ViewData["ReturnUrl"] = returnUrl;
if (ModelState.IsValid)
{
var user = _userManager.FindByNameAsync(model.SelectedUserName); //cannot be used in AddToRoleAsync(user,"AdminRole") since FindByNameAsync returns Task<ApplicationUser>
//var user = new ApplicationUser { UserName = model.SelectedUserName };
var result = await _userManager.AddToRoleAsync(user, "AdminRole");
if (result.Succeeded)
{
return RedirectToLocal(returnUrl);
}
AddErrors(result);
}
// If we got this far, something failed, redisplay form
return View(model);
}
尝试var user = await _userManager.FindByNameAsync(model.SelectedUserName);
似乎Addtoroleasync期望Applicatuser作为第一个参数,但是您提供了任务因此,如果您使用等待在FindbyNameSync调用您的用户变量之前,将是应用程序使用者。