Я пытаюсь вернуть представление, не выдавая переадресацию пользователю на основании определенных ошибок, которые могут возникнуть из моего приложения, я хочу обрабатывать ошибки + регистрировать их внутри моего базового контроллера, я не хочу, чтобы ошибка распространялась до моего метода Global.asax - Application_Error(), поскольку я хочу, чтобы этот метод обрабатывал любые другие ошибки внутри моего приложения, например пользователь вводит фиктивный URL-адрес, кто-нибудь нашел способ обойти это?
ПРИМЕЧАНИЕ. Я оставил свой код с комментариями, так как у меня было обходное решение для некоторых проблем, это также показывает, что у меня есть несколько исключений для возможного дескриптора...
EDIT: если я выдаю RedirectToAction в этом переопределении OnException, все работает так, как ожидалось, но я хочу только вернуть представление и не перенаправлять...
Мой метод базового контроллера:
    protected override void OnException(ExceptionContext filterContext)
    {
        //dont interfere if the exception is already handled
        if (filterContext.ExceptionHandled)
            return;
        //let the next request know what went wrong
        filterContext.Controller.TempData["exception"] = filterContext.Exception;
        //log exception
        _logging.Error(User.Identity.Name, ExceptionHelper.BuildWebExceptionMessage(filterContext.Exception));
        //set up redirect to my global error handler
        //if (filterContext.Exception.GetType() == typeof(NoAccessException))
        //    filterContext.Result = View(new RouteValueDictionary
        //    (new { area = "", controller = "Error", action = "PublicError" }));
        //else {
        //Only return view, no need for redirection
        filterContext.Result = View(new RouteValueDictionary
        (new { area = "", controller = "Error", action = "NoAccess" }));
        //}
        //advise subsequent exception filters not to interfere and stop
        // asp.net from showing yellow screen of death
        filterContext.ExceptionHandled = true;
        //erase any output already generated
        filterContext.HttpContext.Response.Clear();
        //base.OnException(filterContext);
    }
Этот метод должен обрабатывать любые другие ошибки, которые могут появиться в моем приложении, я не хочу, чтобы описанные выше ошибки обрабатывались внутри моего приложения Application_Error()
protected void Application_Error()
        {
            Exception exception = Server.GetLastError();
            // Log the exception.
            var logger = Container.Get<ILoggingService>();
            logger.Error(User.Identity.Name, ExceptionHelper.BuildWebExceptionMessage(exception));
            Response.Clear();
            HttpException httpException = exception as HttpException;
            RouteData routeData = new RouteData();
            routeData.Values.Add("controller", "Error");
            //if (httpException == null)
            //{
            routeData.Values.Add("action", "PublicError");
            //}
            //else //It an Http Exception, Let handle it.
            //{
            //    switch (httpException.GetHttpCode())
            //    {
            //        case 404:
            //            // Page not found.
            //            routeData.Values.Add("action", "HttpError404");
            //            break;
            //        case 500:
            //            // Server error.
            //            routeData.Values.Add("action", "HttpError500");
            //            break;
            //        // Here you can handle Views to other error codes.
            //        // I choose a General error template  
            //        default:
            //            routeData.Values.Add("action", "General");
            //            break;
            //    }
            //}
            // Pass exception details to the target error View.
            routeData.Values.Add("error", exception);
            // Clear the error on server.
            Server.ClearError();
            // Avoid IIS7 getting in the middle
            Response.TrySkipIisCustomErrors = true;
            // Call target Controller and pass the routeData.
            IController errorController = new ErrorController();
            errorController.Execute(new RequestContext(
                 new HttpContextWrapper(Context), routeData));
        }