MVC 5控制器中User.Identity.Name的对象引用错误

本文关键字:Name 对象引用 错误 Identity User 控制器 MVC | 更新日期: 2023-09-27 18:11:37

我想获得当前登录用户的UserName。但是当我使用User.Identity。我得到以下错误:

System.NullReferenceException。对象引用未设置为实例

我得到错误的代码如下:

UsersConfigurationController qr = new UsersConfigurationController();
        public ActionResult Create(FormCollection collection)
        {
            try
            {
                context.Roles.Add(new Microsoft.AspNet.Identity.EntityFramework.IdentityRole()
                {
                    Name = collection["RoleName"]
                });
                context.SaveChanges();
                qr.singleRoleAddToDb(collection["RoleName"]);
                ViewBag.ResultMessage = "Role created successfully !";
                return RedirectToAction("Create");
            }
            catch
            {
                return View();
            }
        }

执行以下行时出现错误:

qr.singleRoleAddToDb(集合("RoleName"));

函数singleRoleAddToDb驻留在UserConfigurationController中,如下所示:

public void singleRoleAddToDb(string rolename)
        {
            UserRoles urls = new UserRoles();
            urls.S1 = rolename;
            urls.S2 = HttpContext.User.Identity.Name;
            urls.N102 = db.Users.Where(x => x.S1 == HttpContext.User.Identity.Name).Single().N102;
            db.UserRoles.Add(urls);
            db.SaveChanges();
        }  

只要行url。S2 = HttpContext.User.Identity.Name;执行调试开关到Catch语句并抛出上述错误。我已经尝试更改配置文件中的身份验证模式:

<authentication mode="Forms" />

<authentication mode="Windows" />

MVC 5控制器中User.Identity.Name的对象引用错误

如果由于某种原因您不能使用调试器来捕获代码并检查变量,您可以尝试这个老技巧…

将以下代码添加到singleRoleAddToDb方法的开头,以检查究竟什么是null:

if (HttpContext == null) 
  throw new ArgumentNullException("HttpContext");
if (HttpContext.User == null) 
  throw new ArgumentNullException("HttpContext.User"); 
if (HttpContext.User.Identity == null) 
  throw new ArgumentNullException("HttpContext.User.Identity");

根据遗漏的内容,您可能需要将其作为附加参数传递