我的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
编辑: 我认为这个问题比其他问题的可能重复更为深刻。#34;我不认为我甚至有正确的引用工作,即使我在解决方案资源管理器中的引用中看到它们,尝试重新添加它们,并尝试使用NugGet导入/更新它们。
不确定这是怎么发生或者为什么发生但不知何故我没有引用OwinContext,它可能导致跟踪返回一个未设置为实例的Object引用。
我甚至不知道如何解释这个MVC / Owin / EF /引用慢慢让我想念MS Access,Visual Basic和DLL Hell。
答案 0 :(得分:0)
这种疯狂可能有一些方法。
在我把所有事情都放在一边之后,我想,&#34;好吧,注册和忘记密码,登录工作,为什么我不知道我是否可以手动添加用户到角色然后看看我是否可以创建自己的代码来在登录时添加用户,因为我不会做很多事情并且将用户分配给角色&#39;事后&#34;?)
非常感谢Google和最后但并非最不重要的StackOverFlow和this link,我不仅能够在注册时将用户添加到角色,而且还能够复制并粘贴上面的一些代码。 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 !";