【问题标题】:The view 'Error' or its master was not found - web.config does not specify an Error view未找到视图“错误”或其主视图 - web.config 未指定错误视图
【发布时间】:2013-01-17 00:21:41
【问题描述】:

背景: 在面向公众的 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 正在寻找一个名为“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>

【问题讨论】:

  • 嗨,巴萨姆。感谢您的链接。在发布之前和现在,我多次阅读了该问题和答案。我认为它不适用,因为我对全局的 Application_Error 没有任何问题,我没有使用 Elmah,而且我没有任何对我可以找到的错误操作或视图的胭脂引用。当我没有指定它应该时,它似乎 MVC 正在尝试查找错误。我相信我已经遵循了典型的约定,但是 MVC 没有呈现我的 /Views/Error/Error500 视图。
  • @ErikOlson 你能解决这个问题吗?我也面临同样的问题。

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


【解决方案1】:

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

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

【讨论】:

    猜你喜欢
    • 2012-04-29
    • 1970-01-01
    • 1970-01-01
    • 2016-04-10
    • 2011-01-17
    • 1970-01-01
    • 2018-01-25
    • 2012-08-21
    相关资源
    最近更新 更多