C# 试图将用户添加到角色,未找到System.Web.HttpContextBaseExtensions.GetOwinEnvironment

C# 试图将用户添加到角色,未找到System.Web.HttpContextBaseExtensions.GetOwinEnvironment,c#,asp.net,asp.net-mvc,asp.net-identity,C#,Asp.net,Asp.net Mvc,Asp.net Identity,我的角色控制器: [HttpPost] [ValidateAntiForgeryToken] public ActionResult RoleAddToUser(string UserName, string RoleName) { ApplicationUser user = context.Users.Where(u => u.UserName.Equals(UserName, StringComparison.CurrentCultureIgnoreCase)).FirstO

我的
角色控制器

[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");
}
[Authorize]
public class AccountController : Controller
{
    private ApplicationSignInManager _signInManager;
    private ApplicationUserManager _userManager;


    public ApplicationUserManager UserManager
    {
        get
        {
            return _userManager ?? HttpContext.GetOwinContext().GetUserManager<ApplicationUserManager>();
        }
    }
}
我的
会计控制器

[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");
}
[Authorize]
public class AccountController : Controller
{
    private ApplicationSignInManager _signInManager;
    private ApplicationUserManager _userManager;


    public ApplicationUserManager UserManager
    {
        get
        {
            return _userManager ?? HttpContext.GetOwinContext().GetUserManager<ApplicationUserManager>();
        }
    }
}
[授权]
公共类AccountController:控制器
{
专用应用程序signInManager\u signInManager;
私有应用程序用户管理器\u用户管理器;
公共应用程序管理员用户管理器
{
得到
{
返回_userManager??HttpContext.GetOwinContext().GetUserManager();
}
}
}
在上面的最后一行是它断开的地方。我只是想给一个角色添加一个用户

对象引用未设置为对象的实例

[NullReferenceException:对象引用未设置为 对象。]
System.Web.HttpContextBaseExtensions.GetowinenEnvironment(HttpContextBase 上下文)+34
System.Web.HttpContextBaseExtensions.GetOwinContext(HttpContextBase 上下文)+50

编辑: 我认为这个问题比“另一个问题可能重复”中提到的任何问题都要深刻。即使我在解决方案资源管理器的引用中看到它们,尝试重新添加它们,并尝试使用NugGet导入/更新它们,但我认为我甚至没有正确的引用

不确定这是如何发生的或为什么发生的,但不知何故,我没有引用OwinContext,这可能是跟踪中返回未设置为实例的对象引用的原因


我甚至不知道如何解释这个MVC/Owin/EF/references正在慢慢让我怀念MS-Access、visualbasic和DLL地狱。

也许有某种方法可以解释所有这些疯狂

在把所有事情都抛在脑后,我想,“好吧,注册并忘记密码,登录正在工作,为什么我不看看是否可以手动将用户添加到角色,然后看看是否可以创建自己的代码在登录时添加用户,因为我以后不会做太多的‘将用户分配到角色’?)

多亏了Google和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 !";
public ActionResult RoleAddToUser(字符串用户名,字符串RoleName)
{
var context=new ApplicationDbContext();
ApplicationUser user=context.Users.Where(u=>u.UserName.Equals(UserName,StringComparison.CurrentCultureIgnoreCase)).FirstOrDefault();
var account=新AccountController();
//var user=newapplicationuser{UserName=UserName,Email=UserName};
//var result=await UserManager.CreateAsync(用户、模型、密码);
var roleStore=新roleStore(上下文);
var roleManager=新roleManager(roleStore);
var userStore=新的userStore(上下文);
var userManager=newusermanager(userStore);
userManager.AddToRole(user.Id,RoleName);
ViewBag.ResultMessage=“角色创建成功!”;

也许有某种方法可以解决所有这些疯狂行为

在把所有事情都抛在脑后,我想,“好吧,注册并忘记密码,登录正在工作,为什么我不看看是否可以手动将用户添加到角色,然后看看是否可以创建自己的代码在登录时添加用户,因为我以后不会做太多的‘将用户分配到角色’?)

多亏了Google和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 !";
public ActionResult RoleAddToUser(字符串用户名,字符串RoleName)
{
var context=new ApplicationDbContext();
ApplicationUser user=context.Users.Where(u=>u.UserName.Equals(UserName,StringComparison.CurrentCultureIgnoreCase)).FirstOrDefault();
var account=新AccountController();
//var user=newapplicationuser{UserName=UserName,Email=UserName};
//var result=await UserManager.CreateAsync(用户、模型、密码);
var roleStore=新roleStore(上下文);
var roleManager=新roleManager(roleStore);
var userStore=新的userStore(上下文);
var userManager=newusermanager(userStore);
userManager.AddToRole(user.Id,RoleName);
ViewBag.ResultMessage=“角色创建成功!”;

看起来
GetOwinContext
正在返回null,你能确认吗?嗨,大卫,我不知道如何判断GetOwinContext是否正在返回null。我似乎无法使用Microsoft.AspNet.Identity.Core;将其添加到帐户控制器的顶部。我在Core下得到一条红线。我从Nuget重新下载了这个库,它说它是already已安装。但我想他们的东西是我需要的。可能的副本看起来像
GetOwinContext
返回空值,你能确认吗?嗨,大卫,我不知道如何判断GetOwinContext是否返回空值。我似乎无法使用Microsoft.AspNet.Identity.Core;将其添加到帐户控制器的顶部。I g在Core下面画一条红线。我从Nuget重新下载了这个库,它说它已经安装好了。但我想他们的东西是我需要的。可能是重复的