MVC 5 控制器中 User.Identity.Name 的对象引用错误
Object Reference error for User.Identity.Name in MVC 5 Controller
我想获取当前登录用户的用户名。但是当我使用 User.Identity.Name 时出现以下错误:
System.NullReferenceException. Object reference not set to an instance
of an object.
出现错误的代码如下:
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(collection["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" />
但错误仍在继续。
如果由于某种原因您无法使用调试器来捕获代码并检查变量,您可以尝试这个老技巧...
将以下代码添加到 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");
根据最终遗漏的内容,您可能需要将其作为附加参数传递。
我想获取当前登录用户的用户名。但是当我使用 User.Identity.Name 时出现以下错误:
System.NullReferenceException. Object reference not set to an instance of an object.
出现错误的代码如下:
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(collection["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" />
但错误仍在继续。
如果由于某种原因您无法使用调试器来捕获代码并检查变量,您可以尝试这个老技巧...
将以下代码添加到 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");
根据最终遗漏的内容,您可能需要将其作为附加参数传递。