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

时间:2015-09-08 10:38:05

标签: c# asp.net-mvc asp.net-identity

我想获取当前登录用户的UserName。但是当我使用 User.Identity.Name 时,我收到了以下错误:

  

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();

        }  

一旦 urls.S2 = HttpContext.User.Identity.Name; 行执行调试器切换到Catch语句并抛出上面提到的错误。 我已经尝试在配置文件中更改身份验证模式:

<authentication mode="Forms" />

以及

<authentication mode="Windows" />

但错误仍在继续。

1 个答案:

答案 0 :(得分:0)

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

将以下代码添加到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");

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