私の次のアクションメソッドでは、design time error
という行がvar result = await _userManager.AddToRoleAsync(user, "AdminRole");
に続いています。しかし、私がvar user = new ApplicationUser { UserName = model.SelectedUserName
を使用してユーザーを取得した場合、上記の行は設計時エラーを表示しません。予想通り、run time validation error
はUser someUSerName already exist
となります。実行時エラーは、既存のユーザーに役割を追加していて、その新しいインスタンスを渡していることが原因であると私は理解しています。 質問:既存のユーザーをApplicationUserオブジェクトとして取得するには、どうすればいいですか?下にAddToRoleAsync(....)
に渡すことはできますか?私はASP.NET Core 1.1.1、個人ユーザーアカウントモード、VS2017を使用しています。指定したユーザーのApplicationUserオブジェクトを取得する方法
エラー:
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);
}
あなたのソリューションは機能しました。あなたは実際に私に 'await'の本当の使い方を説明しました(ありがとう)。あなたの提案された解決策にはタイプミスがあります。あなたは 'await _userManager.c(model.SelectedUserName);'でFindByNameAsync'を見逃したでしょう。他の読者のために、あなたのソリューションを編集してもらえますか?私はそれを「回答」としてマークします。 – nam