5

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

问题。尽管 URL 不正确,但我收到的错误是出乎意料的。

例如: - 用户(从外部 URL)导航到 /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 正在寻找一个名为“错误”的视图,以及为什么 MVC 不搜索 web.config 中指定的视图 (Error500)。以下是适用的源文件:

网络配置:

<customErrors mode="RemoteOnly" defaultRedirect="~/Error/Error500">
  <error statusCode="404" redirect="~/Error/Error404" />
</customErrors>

错误控制器文件:

   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>
4

1 回答 1

2

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

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

于 2013-09-24T02:31:20.243 回答