我想获得当前登录用户的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" />
如果由于某种原因您不能使用调试器来捕获代码并检查变量,您可以尝试这个老技巧…
将以下代码添加到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");
根据遗漏的内容,您可能需要将其作为附加参数传递