Страницы с ошибками не найдены, выдает ошибку ELMAH с пользовательскими страницами ошибок

Я сделал некоторые изменения в Global.asax, чтобы я мог показывать пользовательские страницы ошибок (403, 404 и 500). Вот код:

    public class MvcApplication : System.Web.HttpApplication
    {
        protected void Application_Start()
        {
            AreaRegistration.RegisterAllAreas();

            WebApiConfig.Register(GlobalConfiguration.Configuration);
            //FilterConfig.RegisterGlobalFilters(GlobalFilters.Filters);
            RouteConfig.RegisterRoutes(RouteTable.Routes);
            BundleConfig.RegisterBundles(BundleTable.Bundles);
        }

        protected void Application_Error(object sender, EventArgs e)
        {
            if (Context.IsCustomErrorEnabled)
            {
                ShowCustomErrorPage(Server.GetLastError());
            }
        }

        private void ShowCustomErrorPage(Exception exception)
        {
            HttpException httpException = exception as HttpException;
            if (httpException == null)
            {
                httpException = new HttpException(500, "Internal Server Error", exception);
            }

            Response.Clear();
            RouteData routeData = new RouteData();
            routeData.Values.Add("controller", "Error");
            routeData.Values.Add("fromAppErrorEvent", true);

            switch (httpException.GetHttpCode())
            {
                case 403:
                    routeData.Values.Add("action", "AccessDenied");
                    break;

                case 404:
                    routeData.Values.Add("action", "NotFound");
                    break;

                case 500:
                    routeData.Values.Add("action", "ServerError");
                    break;

                default:
                    routeData.Values.Add("action", "DefaultError");
                    routeData.Values.Add("httpStatusCode", httpException.GetHttpCode());
                    break;
            }

            Server.ClearError();

            IController controller = new ErrorController();
            controller.Execute(new RequestContext(new HttpContextWrapper(Context), routeData));
        }
    }

Я также добавил следующее в свой Web.Config:

<customErrors mode="On">
    <!-- There is custom handling of errors in Global.asax -->
</customErrors>

Пользовательские страницы ошибок отображаются правильно, и ELMAH будет правильно регистрировать ошибку, которая была (целенаправленно) выдана. Но ELMAH также ловит и регистрирует дополнительную ошибку:

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

Мои первые инстинкты привели меня к отключению глобальнойHandleErrorAttribute в конфигурации фильтра. И подобные вопросы, такие как:Проблема MVC с пользовательскими страницами ошибок заставил меня поверить, что мои подозрения верны. Но даже после отключения глобальнойHandleErrorAttribute Я все еще получаю сообщение об ошибке, что представление об ошибке не может быть найдено! Что дает? Моя единственная догадка, что мой базовый контроллер происходит отSystem.Web.Mvc.Controller Я попытался изучить источник, чтобы увидеть, еслиHandleErrorAttribute применяется кSystem.Web.Mvc.Controller но ничего не смог подобрать ...

ОБНОВЛЕНИЕ: я попытался переопределить свой базовый контроллер, чтобы пометить исключения как обработанные следующим образом:

protected override void OnException(ExceptionContext filterContext)
{
    filterContext.ExceptionHandled = true;
    base.OnException(filterContext);
}

но это не решило проблему.

ОБНОВЛЕНИЕ 2: Я поместил файл Error.aspx в общие представления, просто чтобы посмотреть, что произойдет. Когда это там, ELMAH регистрирует принудительное исключение, и затем разделяемое представление обслуживается - оно никогда не достигаетApplication_Error() .... не слишком уверен, что с этим делать.

Ответы на вопрос(2)

Ваш ответ на вопрос