MVC5 Account Controller null reference exception

孤街浪徒 提交于 2019-11-30 09:20:54

These are undoubtedly the offending lines...

var account = new AccountController();
if (user != null) account.UserManager.AddToRole(user.Id, RoleName);

Controllers aren't meant to be instantiated in this way because they are heavily tied to the current HTTP request (thus the HttpContext).

When HttpContext.GetOwinContext().GetUserManager<ApplicationUserManager>(); gets hit, HttpContext is null because there is no context.

You can simply put the same property in your controller where you are trying to access the UserManager. This works because the OwinContext is shared across your entire application.

public class HomeController : Controller
{
    public ApplicationUserManager UserManager
    {
        get { return _userManager ?? HttpContext.GetOwinContext().GetUserManager<ApplicationUserManager>(); }
        private set {_userManager = value; }
    }

    public ActionResult RoleAddToUser(string UserName, string RoleName)
    {
        ApplicationUser user = context.Users.FirstOrDefault(u => u.UserName.Equals(UserName, StringComparison.CurrentCultureIgnoreCase));
        if (user != null) UserManager.AddToRole(user.Id, RoleName);

        //Other code...

        return View("ManageUserRoles");
    }
}

And if you want to get really fancy, declare a BaseController that inherits from Controller, put the UserManager property inside, and have all your other controllers inherit from your base.

标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!