/// <summary>
        /// Called when a request matches this controller, but no method with the specified action name is found in the controller.
        /// </summary>
        /// <param name="actionName">The name of the attempted action.</param>
        protected override void HandleUnknownAction(string actionName)
        {
            // Avoid IIS7 getting in the middle
            Response.TrySkipIisCustomErrors = true;

            IController errorsController = new Controllers.ErrorController();
            var errorRoute = new RouteData();
            errorRoute.Values.Add("controller", "error");
            errorRoute.Values.Add("action", "notfound");
            errorRoute.Values.Add("url", HttpContext.Request.Url.OriginalString);
            errorsController.Execute(new RequestContext(HttpContext, errorRoute));
        }
        /// <summary>
        /// Called when a request matches this controller, but no method with the specified action name is found in the controller.
        /// </summary>
        /// <param name="actionName">The name of the attempted action.</param>
        protected override void HandleUnknownAction(string actionName)
        {
            // Avoid IIS7 getting in the middle
            Response.TrySkipIisCustomErrors = true;

            IController errorsController = new Controllers.ErrorController();
            var         errorRoute       = new RouteData();

            errorRoute.Values.Add("controller", "error");
            errorRoute.Values.Add("action", "notfound");
            errorRoute.Values.Add("url", HttpContext.Request.Url.OriginalString);
            errorsController.Execute(new RequestContext(HttpContext, errorRoute));
        }
            private void RedirectToErrorAction(HttpContext context, string actionName)
            {
                context.Server.ClearError();
                context.Response.TrySkipIisCustomErrors = true;
                context.Response.Clear();
                RouteData routeData = new RouteData();

                routeData.Values.Add("controller", "error");
                routeData.Values.Add("action", actionName);
                IController errorController    = new Controllers.ErrorController();
                var         httpContextWrapper = new HttpContextWrapper(context);
                var         requestContext     = new RequestContext(httpContextWrapper, routeData);

                errorController.Execute(requestContext);
            }
    public override void OnException(System.Web.Mvc.ExceptionContext filterContext)
    {
        filterContext.ExceptionHandled = true;

        var routeData = new RouteData();

        routeData.Values["controller"] = "Error";
        routeData.Values["action"]     = "Error";
        routeData.DataTokens["area"]   = "app";

        IController errorsController = new Controllers.ErrorController();
        var         rc = new RequestContext(new HttpContextWrapper(HttpContext.Current), routeData);

        errorsController.Execute(rc);
        base.OnException(filterContext);
    }
        void Application_Error(object sender, EventArgs e)
        {
            var exception = context.Server.GetLastError();

            TryLogException(exception);
            var httpException = exception as HttpException;

            context.Response.Clear();
            context.Server.ClearError();
            var routeData = new RouteData();

            routeData.Values["controller"] = "Error";
            routeData.Values["action"]     = "General";
            routeData.Values["exception"]  = exception;
            context.Response.StatusCode    = 500;

            if (httpException != null)
            {
                context.Response.StatusCode = httpException.GetHttpCode();
                switch (context.Response.StatusCode)
                {
                case 401:
                    routeData.Values["action"] = "Http401";
                    break;

                case 403:
                    routeData.Values["action"] = "Http403";
                    break;

                case 404:
                    routeData.Values["action"] = "Http404";
                    break;
                }
            }

            IController errorsController = new Controllers.ErrorController();
            var         requestedContext = new RequestContext(new HttpContextWrapper(context.Context), routeData);

            errorsController.Execute(requestedContext);
        }