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

时间:2013-02-01 16:16:43

标签: c# asp.net-mvc razor asp.net-mvc-4 error-handling

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

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

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

  

未找到视图“错误”或其主控或没有查看引擎   支持搜索的位置。以下地点是   搜索:〜/ Views / Blog / Error.aspx~ / Views / Blog / Error.ascx   〜/ Views / Shared / Error.aspx~ / Views / Shared / Error.ascx   〜/ Views / Blog / Error.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>

ErrorController文件:

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

       public ActionResult Error404()
       {
          return View();
       }
   }

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>

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>

1 个答案:

答案 0 :(得分:2)

您确定用户正在点击不存在的网址吗?从一个小的repro看来,我刚刚提出,如果动作方法不存在,这可以按预期工作。如果在路由解析的操作方法中抛出错误并且您正在使用HandleErrorAttribute,那么您将收到您提到的错误。你的路由是什么样的?

除了通过电子邮件发送自己的错误信息并不是接收应用程序错误的可持续途径!您应该查看错误记录服务以便为您处理此问题。我推荐Bugsnag。 (免责声明:我在Bugsnag工作:))