在我的一个ASP.NET MVC网站上,我偶尔会在生产中获得NPE,因为我无法理解根本原因。我正在使用ELMAH来跟踪错误。
完整的堆栈跟踪在这里(对它来说并不多:
System.NullReferenceException: Object reference not set to an instance of an object.
at PG.Controllers.FooController.FooActionName(FooModel model) in
{REMOVED}\web\www\Controllers\FooController.cs:line 622
这是第622行:
if(UserCanEditFoo(out result))
这是“UserCanEditFoo列表:
private bool UserCanEditFoo(out ActionResult result)
{
String email = User != null && User.Identity != null ? User.Identity.Name : String.Empty;
UserAccount user = String.IsNullOrEmpty(email) ? null : this.accountServices.GetUserAccount(email);
bool canEditFoo = false;
result = null;
// Don't know this user
if(user == null)
{
FormsAuthentication.SignOut();
Session.Abandon();
result = RedirectToAction(Routes.Actions.Index, Routes.Controllers.Home);
}
// Only admins and foo profile can edit foo
else if(user.Role != Types.UserRole.Admin && user.Role != Types.UserRole.Foo)
{
result = new HttpUnauthorizedResult("Oops! Only administrators and foo users can edit foo.");
}
else
{
result = null;
canEditFoo = true;
}
return canEditFoo;
}
我假设在“UserCanEditFoo”私有方法中实际引发了异常,但我不明白为什么不报告行号。另一方面,如果在第622行真正提出异常,我不明白如何进行这是一个简单的函数调用。
任何帮助将不胜感激。提前谢谢。
答案 0 :(得分:0)
假设this.accountServices
不能为空,您的代码对我来说很好,所以我建议异常实际发生在其他地方(可能是由于内联)。
有关在发布模式下显示正确行号的详细信息,请查看this question。