视图'错误'或者找不到它的主人

时间:2012-04-17 21:20:42

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

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

我正在使用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正在尝试加载默认错误页面,即使我正在尝试处理它。有没有人对如何防止这种情况有任何想法?

5 个答案:

答案 0 :(得分:29)

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

答案 1 :(得分:14)

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

<customErrors mode="On" />

答案 2 :(得分:3)

您的网站正试图导航到〜/错误,但由于它不存在而无法找到它。

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

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

答案 3 :(得分:3)

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

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

这将启用Elmah日志记录,但不会尝试重定向到默认错误页面。

答案 4 :(得分:1)

如果您使用Elmah.mvc,则有助于将此设置更改为true:

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