【问题标题】:The view 'Error' or its master was not found未找到视图“错误”或其主视图
【发布时间】:2012-04-29 06:31:07
【问题描述】:

我花了很多时间试图找出解决方法,但无济于事,所以我想看看这里是否有人有想法。

我正在使用Elmah in my ASP.NET MVC3 application。我使用的代码与上一个链接中接受的答案完全相同。

我的 Global.asax 中也有这段代码,用于显示带有正确 HTTP 响应的错误页面:

    /// <summary>
    /// The customErrors functionality provided by ASP.NET results in HTTP 302 redirects occurring which doesn't accurately reflect what the real HTTP code of the response was.
    /// This method can be used to handle specific HTTP codes without an intermediate redirect.
    /// </summary>
    protected void Application_Error() {
        var exception = Server.GetLastError();
        var httpException = exception as HttpException;
        Response.Clear();
        Server.ClearError();
        var routeData = new RouteData();
        routeData.Values["controller"] = "Error";
        routeData.Values["action"] = "Error500";
        Response.StatusCode = 500;

        if (httpException != null) {
            Response.StatusCode = httpException.GetHttpCode();
            Response.TrySkipIisCustomErrors = true;
            switch (Response.StatusCode) {
                case 403:
                    routeData.Values["action"] = "Error403";
                    break;
                case 404:
                    routeData.Values["action"] = "Error404";
                    routeData.Values["message"] = httpException.Message;
                    break;
                case 500:
                    routeData.Values["action"] = "Error500";
                    break;
            }
        }

        IController errorsController = new ErrorController();
        var rc = new RequestContext(new HttpContextWrapper(Context), routeData);
        errorsController.Execute(rc);
    }

当我不在我的(本地)开发机器上时会出现问题(最初让我认为它与customErrors 相关)。当抛出异常时,Elmah 会处理错误并正确记录它。我也最终出现在正确的错误页面上。但是,在进入正确的错误页面之前,我可以看到另一个中间异常被记录:

The view 'Error' or its master was not found or no view engine supports the searched locations. The following locations were searched: ~/Views/Articles/Error.aspx ~/Views/Articles/Error.ascx ~/Views/Shared/Error.aspx ~/Views/Shared/Error.ascx ~/Views/Articles/Error.cshtml ~/Views/Articles/Error.vbhtml ~/Views/Shared/Error.cshtml ~/Views/Shared/Error.vbhtml

ASP.NET 正在尝试加载默认错误页面,即使我正在尝试处理它。有人对如何防止这种情况有任何想法吗?

【问题讨论】:

    标签: asp.net-mvc-3 error-handling elmah


    【解决方案1】:

    不要在派生自HandleErrorAttribute 的自定义错误处理程序中调用base.OnException(context); 方法。您不再需要它,因为您在 Application_Error 中实现了自定义错误处理。

    【讨论】:

    • 成功了。在查看 HandleErrorAttribute 的源代码后,我可以看到我需要跳过一些基本功能,但我认为你是对的,我可以完全跳过调用它并且没问题。感谢您的帮助。
    • 同样的问题,不同的原因。这个答案让我找到了正确的方向。我正在使用带有重定向到自定义 ErrorsController 的 。原来我还有一个来自原始项目模板的 FilterConfig.RegisterGlobalFilters() ,其中包含一个 filters.Add(new HandleErrorAttribute()) 行。删除它为我做了它。
    • @JonathanN 伙计,你救了我!
    • @JonathanN tsm!
    【解决方案2】:

    我遇到了同样的问题,但我没有在任何地方执行 base.OnException()。另一种可能的解决方案是从我的 web.config 中的 &lt;system.web&gt; 中删除它:

    <customErrors mode="On" />
    

    【讨论】:

    • 如果您的 web.config 中没有 customErrors,请使用 mode="Off" 显式添加一个
    • 戴夫的评论是我的答案
    【解决方案3】:

    如果您使用 Elmah.MVC 并想使用自定义错误页面,只需在您的 Web.config 中将以下值更改为 true:

    <add key="elmah.mvc.disableHandleErrorFilter" value="true" />
    

    这将使 Elmah 日志记录保持启用状态,但阻止它尝试重定向到默认错误页面。

    【讨论】:

      【解决方案4】:

      您的网站试图导航到 ~/Error 的某个位置,但由于它不存在而无法找到它。

      尝试在您的 Web.config 中删除或禁用 customErrors。我愿意将其设置为默认的 on 并重定向到 ~/Error

      如果您想发布您的 Web.config(省略任何敏感信息),我可能会提供帮助。我最近和 Elmah 处理过类似的问题。

      【讨论】:

      • 我实际上认为我知道问题出在哪里,我只是不确定解决它的最佳方法。我在 Global.asax 中设置了 HTTP 响应,但是 OnException 覆盖正在执行它自己的结果。默认情况下,结果是它找不到的视图,因为我删除了它。所以我可能需要在我的 OnException 覆盖中设置 context.Result 属性,但我不知道如何使用我拥有的自定义错误控制器来做到这一点。
      【解决方案5】:

      如果您使用 Elmah.mvc,那么将这个设置更改为 true 会有所帮助:

      <add key="elmah.mvc.disableHandler" value="true" />
      <add key="elmah.mvc.disableHandleErrorFilter" value="true" />
      

      【讨论】:

      • 这不会禁用 Elmah 吗?
      猜你喜欢
      • 2013-01-17
      • 2016-04-10
      • 2011-01-17
      • 2012-08-21
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多