ASP.NET MVC空引用异常求助:登录及产品功能均报Null Exception
问题描述
我正在做期末学期项目,原本应用运行正常,添加产品功能后只正常运行了一次,之后该功能就出现空引用异常(Null Exception),现在连登录功能也报同样的错误。
- 错误截图1:

- 错误截图2:

相关代码
[HttpPost] public ActionResult LogIn(User ur, string ReturnUrl) { if (isValid(ur) == true) { FormsAuthentication.SetAuthCookie(ur.UserName, false); Session["Usrname"] = ur.UserName; if (ReturnUrl != null) { return Redirect(ReturnUrl); } else { return RedirectToAction("Index", "Dashboard"); } } else { ViewBag.msg = "Email Or Password is incorrect"; return View(); } } bool isValid(User ur) { var cred = u_DB.Users.Where(model => model.UserEmail == ur.UserEmail && model.UserPassword == ur.UserPassword).FirstOrDefault(); if (cred != null) { return true; } else { return false; } }
问题排查与解决建议
空引用核心排查点
- 检查
u_DB是否为null:isValid方法中,若数据库上下文u_DB未正确初始化,访问u_DB.Users会直接触发空引用异常。 - 检查传入的
ur对象是否为null:如果登录请求参数绑定失败,ur会是null,此时访问ur.UserEmail或ur.UserPassword会报错。 - 排查产品功能的影响:添加产品功能后可能修改了数据库上下文的生命周期配置(比如误用单例模式),导致上下文被释放后重复使用,引发空引用。
- 检查
针对性修复方案
- 正确初始化数据库上下文:在控制器构造函数中实例化上下文,确保非空:
private readonly YourDbContext u_DB; public YourController(YourDbContext dbContext) { u_DB = dbContext ?? throw new ArgumentNullException(nameof(dbContext)); } - 添加参数空值校验:在方法开头增加空值检查,避免无效访问:
public ActionResult LogIn(User ur, string ReturnUrl) { if (ur == null) { ViewBag.msg = "无效的登录请求"; return View(); } // 原有代码... } bool isValid(User ur) { if (ur == null || string.IsNullOrEmpty(ur.UserEmail) || string.IsNullOrEmpty(ur.UserPassword)) { return false; } // 原有代码... } - 确认上下文生命周期:确保数据库上下文使用Scoped生命周期(ASP.NET MVC默认是每个请求实例化一次),避免因上下文提前释放导致的异常。
- 正确初始化数据库上下文:在控制器构造函数中实例化上下文,确保非空:
内容的提问来源于stack exchange,提问作者Tauqeer Haider
相关产品推荐
相关产品推荐

