试图将用户添加到角色中,找不到System.Web.HttpContextBaseExtensions.GetOwinE
本文关键字:找不到 System Web GetOwinE HttpContextBaseExtensions 角色 用户 添加 | 更新日期: 2023-09-27 18:19:42
我的RoleController
:
[HttpPost]
[ValidateAntiForgeryToken]
public ActionResult RoleAddToUser(string UserName, string RoleName)
{
ApplicationUser user = context.Users.Where(u => u.UserName.Equals(UserName, StringComparison.CurrentCultureIgnoreCase)).FirstOrDefault();
var account = new AccountController();
account.UserManager.AddToRole(user.Id, RoleName);
ViewBag.ResultMessage = "Role created successfully !";
// prepopulat roles for the view dropdown
var list = context.Roles.OrderBy(r => r.Name).ToList().Select(rr => new SelectListItem { Value = rr.Name.ToString(), Text = rr.Name }).ToList();
ViewBag.Roles = list;
return View("ManageUserRoles");
}
我的AccountController
:
[Authorize]
public class AccountController : Controller
{
private ApplicationSignInManager _signInManager;
private ApplicationUserManager _userManager;
public ApplicationUserManager UserManager
{
get
{
return _userManager ?? HttpContext.GetOwinContext().GetUserManager<ApplicationUserManager>();
}
}
}
上面最后一行是它断裂的地方。我只是想把一个用户添加到一个角色中。
对象引用未设置为对象的实例。
[NullReferenceException:对象引用未设置为对象。]
System.Web.HttpContextBaseExtensions.GetOwinEnvironment(HttpContextBase上下文)+34
System.Web.HttpContextBaseExtensions.GetOwinContext(HttpContextBase上下文)+50
编辑:我认为这个问题比"另一个问题的可能重复"中提到的任何问题都要深刻。我认为我甚至没有正确的引用,即使我在解决方案资源管理器的引用中看到它们,尝试重新添加它们,并尝试使用NugGet导入/更新它们。
不确定这是如何或为什么发生的,但不知何故,我没有引用OwinContext,这可能是跟踪中返回未设置为实例的Object引用的原因。
我甚至不知道如何解释MVC/Owin/EF/引用的东西,这些东西慢慢地让我错过了MS Access、Visual Basic和DLL地狱。
这一切疯狂可能有某种方法。
在把一切都放在一边一天后,我想,"好吧,注册和忘记密码以及登录都在工作,为什么我不看看我是否可以手动将用户添加到角色中,然后看看我是否能够创建自己的代码来在登录时添加用户,因为之后我不会做太多‘将用户分配到角色’的工作?")
因此,多亏了谷歌,最后但并非最不重要的是StackOverFlow和这个链接,我不仅能够在他们注册时将用户添加到角色,而且能够复制并粘贴AddToRole行正上方的一些代码,这给了我错误。和成功了!这是我添加的代码。我更改了一些内容,因为Register创建了一个新用户,但AddToRole使用的是一个现有用户。所以我不需要新的名称空间,只需要比我聪明得多的人提供的新知识。
public ActionResult RoleAddToUser(string UserName, string RoleName)
{
var context = new ApplicationDbContext();
ApplicationUser user = context.Users.Where(u => u.UserName.Equals(UserName, StringComparison.CurrentCultureIgnoreCase)).FirstOrDefault();
var account = new AccountController();
// var user = new ApplicationUser { UserName = UserName, Email = UserName };
//var result = await UserManager.CreateAsync(user, model.Password);
var roleStore = new RoleStore<IdentityRole>(context);
var roleManager = new RoleManager<IdentityRole>(roleStore);
var userStore = new UserStore<ApplicationUser>(context);
var userManager = new UserManager<ApplicationUser>(userStore);
userManager.AddToRole(user.Id, RoleName);
ViewBag.ResultMessage = "Role created successfully !";