试图将用户添加到角色中,找不到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地狱。

试图将用户添加到角色中,找不到System.Web.HttpContextBaseExtensions.GetOwinE

这一切疯狂可能有某种方法。

在把一切都放在一边一天后,我想,"好吧,注册和忘记密码以及登录都在工作,为什么我不看看我是否可以手动将用户添加到角色中,然后看看我是否能够创建自己的代码来在登录时添加用户,因为之后我不会做太多‘将用户分配到角色’的工作?")

因此,多亏了谷歌,最后但并非最不重要的是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 !";