【发布时间】:2015-02-03 08:09:15
【问题描述】:
近一年以来,我的 MVC4 Web 应用程序运行正常并正常运行。最近在查看生产错误日志时,我发现了很多相同类型的神秘异常条目。我检查了日志,发现这些异常发生在 Beta 和 Production 环境中,但不在本地(似乎是一个提示 - 请参阅下面的发现 1)。
有两个后续条目:
一个是:
线程 ID:56,消息:Server_Exception - 视图“错误”或其 没有找到主人或没有视图引擎支持搜索 地点。搜索了以下位置: ~/Views/OrganizationUser/Error.cshtml ~/Views/OrganizationUser/Error.vbhtml ~/Views/Shared/Error.cshtml ~/Views/Shared/Error.vbhtml
第二个日志条目是:
线程 ID:56,消息:Server_Exception - 堆栈跟踪 - 在 System.Web.Mvc.ViewResult.FindView(ControllerContext 上下文)在 System.Web.Mvc.ViewResultBase.ExecuteResult(ControllerContext 上下文) 在 System.Web.Mvc.Async.AsyncControllerActionInvoker.c__DisplayClass25.b__22(IAsyncResult asyncResult) 在 System.Web.Mvc.Controller.c__DisplayClass1d.b__18(IAsyncResult asyncResult) 在 System.Web.Mvc.Async.AsyncResultWrapper.c__DisplayClass4.b__3(IAsyncResult ar) 在 System.Web.Mvc.Controller.EndExecuteCore(IAsyncResult asyncResult) 在 System.Web.Mvc.Async.AsyncResultWrapper.c__DisplayClass4.b__3(IAsyncResult 一只老鼠 System.Web.Mvc.MvcHandler.c__DisplayClass8.b__3(IAsyncResult asyncResult) 在 System.Web.Mvc.Async.AsyncResultWrapper.c__DisplayClass4.b__3(IAsyncResult 一只老鼠 System.Web.HttpApplication.CallHandlerExecutionStep.System.Web.HttpApplication.IExecutionStep.Execute() 在 System.Web.HttpApplication.ExecuteStep(IExecutionStep 步骤, Boolean & completedSynchronously)
从 global.asax.cs 中的 Application_Error() 记录异常,如下所示:
var ex = Server.GetLastError();
if (ex != null)
{
logger.Log(string.Format("Server_Exception - {0}", ex.Message), LogCategory.Error);
logger.Log(string.Format("Server_Exception - Stack Trace - {0}", ex.StackTrace), LogCategory.Error);
}
这是数据库日志消息的快照:
发现/分析:
由于错误只记录在远程服务器上,它告诉我它与 MVC 如何处理远程错误有关?自定义错误? - 我没有在 web.config 中定义它。我应该吗?
但主要的问题是,是什么导致了错误的发生?谁在寻找视图名称错误?我知道你很难猜到,只是看看我的运气。
另一个发现是在用户注销后记录了异常。在我的登录获取表单中,我检查 isAuthenticated,如果用户未通过身份验证,我会记录一条消息“请求未通过身份验证,显示登录表单”。并显示登录表单。我可以在上述异常消息之前看到此消息。那么 login.cshtml 上发生了什么会导致与服务器的联系产生错误?我检查了登录页面和 _Layout,其中嵌入了很多服务器端代码,但无法弄清楚是什么导致服务器尝试加载错误页面。
我认为 MVC 在内部调用了我的源代码中不存在的错误页面,因此出现了这些异常。但为什么是“错误”页面?我想就在这种情况下检查什么获得建议。如果您希望我分享任何可以帮助您理解我的问题的信息,请告知。
【问题讨论】:
-
在项目级别搜索“return View("Error")”或只搜索“View("Error")”,不带引号。我敢打赌你会受到 AccountController 的欢迎。
-
@rism - 你输了 ;).... 我实际上在解决方案中做了所有可能的组合。我怀疑它是调用错误视图的框架内部的东西。无论如何感谢您的建议。
-
谢天谢地,RussCam 以他最出色的答案来救援。
标签: c# asp.net asp.net-mvc asp.net-mvc-4 razor