未找到视图"错误"或其主控 - web.config未指定错误视图

Eri*_*son 5 c# error-handling asp.net-mvc razor asp.net-mvc-4

背景:在面向公众的ASP.NET MVC4应用程序中,有时我会收到对错误URL的入站请求.引荐来自外部所以我的应用程序是我无法控制的(我没有在我的应用程序中生成错误的URL).因此MVC正确引发异常并且用户看到自定义错误页面.global.asax被编码为电子邮件错误给我.

问题.虽然URL很糟糕,但我收到的错误是意外的.

例如: - 用户导航(从外部URL)到/ Blog/View - Blog控制器没有View操作 - 向用户显示Error500自定义错误网页 - 我通过电子邮件收到的错误是:

未找到视图"错误"或其主控,或者没有视图引擎支持搜索的位置.以下地点搜索:〜/查看/博客/ Error.aspx〜/查看/博客/ Error.ascx〜/查看/共享/ Error.aspx〜/查看/共享/ Error.ascx〜/查看/博客/错误. cshtml~/Views/Blog/Error.vbhtml~/Views/Shared/Error.cshtml~/Views/Shared/Error.vbhtml

我不明白为什么ASP.NET MVC4正在寻找名为"Error"的视图,以及为什么MVC不会在web.config中搜索指定的视图(Error500).以下是适用的源文件:

Web.Config:

<customErrors mode="RemoteOnly" defaultRedirect="~/Error/Error500">
  <error statusCode="404" redirect="~/Error/Error404" />
</customErrors>
Run Code Online (Sandbox Code Playgroud)

ErrorController文件:

   public class ErrorController : Controller
   {
       public ActionResult Error500()
       {
           return View();
       }

       public ActionResult Error404()
       {
          return View();
       }
   }
Run Code Online (Sandbox Code Playgroud)

Error404.cshtml文件(位于/ Views/Error文件夹中):

   @{
       ViewBag.Title = "Oops...";
       Layout = "~/Views/Shared/_Layout.cshtml";
   }

   <h1>That's interesting</h1>
   <p>The page you were looking for could not be found.</p>
Run Code Online (Sandbox Code Playgroud)

Error500.cshtml文件(位于/ Views/Error文件夹中):

@{
    ViewBag.Title = "Oops...";
    Layout = "~/Views/Shared/_Layout.cshtml";
}

<h1>We're sorry about that</h1>
<p>Something unexpected just happened.  Our IT staff has been notified...time to code a hot-fix!</p>
Run Code Online (Sandbox Code Playgroud)

mar*_*308 2

您确定用户访问的 URL 不存在吗?从我刚刚制作的一个小复制看来,如果操作方法不存在,这将按预期工作。当在路由解决的操作方法中引发错误并且您正在使用 HandleErrorAttribute 时,您将收到您提到的错误。你的路线是什么样的?

顺便说一句,向自己发送有关错误的电子邮件并不是接收有关您的应用程序错误的可持续途径!您应该查看错误日志服务来为您处理此问题。我推荐Bugsnag。(免责声明:我在 Bugsnag 工作:))