我想获取当前登录用户的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" />
但错误仍在继续。
答案 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");
根据遗失的内容,您可能需要将其作为附加参数传递。