private static void setErrorController(HttpControllerContext controllerContext, HttpResponseException ex) { var controllerName = "Error404"; var code = ex.Response.StatusCode; var routeValues = controllerContext.RouteData.Values; if (code != HttpStatusCode.NotFound && code != HttpStatusCode.MethodNotAllowed) { controllerName = "ErrorOthers"; routeValues["id"] = code; } routeValues["action"] = "Get"; controllerContext.Request.Method = HttpMethod.Get; IHttpController httpController = new Error404Controller(); controllerContext.Controller = httpController; controllerContext.ControllerDescriptor = new HttpControllerDescriptor(controllerContext.Configuration, controllerName, httpController.GetType()); }
public override void OnException(ExceptionContext filterContext) { RouteData currentRouteData = filterContext.RouteData.Route.GetRouteData(filterContext.HttpContext); String currentController = String.Empty, currentAction = String.Empty; if (filterContext.HttpContext.Request.IsAjaxRequest()) { //Because its a exception raised after ajax invocation //Lets return Json filterContext.Result = new JsonResult() { Data = filterContext.Exception.Message, JsonRequestBehavior = JsonRequestBehavior.AllowGet }; filterContext.ExceptionHandled = true; filterContext.HttpContext.Response.Clear(); return; } if (currentRouteData != null) { currentController = currentRouteData.Values["controller"].ToString(); currentAction = currentRouteData.Values["action"].ToString(); } filterContext.ExceptionHandled = true; //filterContext.HttpContext.Response.StatusCode = 200; //filterContext.HttpContext.ClearError(); filterContext.Result = new ViewResult() { ViewName = currentAction, }; return; base.OnException(filterContext); Exception ex = (Exception)filterContext.Exception; HttpContextBase httpContext = filterContext.HttpContext; httpContext.ClearError(); RouteData routeData = new RouteData(); string CustomExceptionType = String.Empty; CustomExceptionType = ex.GetType().Name; if (CustomExceptionType == "CustomMessage") { CustomMessage cm = (CustomMessage)filterContext.Exception; routeData.Values["ExceptionMessage"] = cm.Message; var viewData = new ViewDataDictionary <HandleErrorInfo>(filterContext.Controller.ViewData); viewData.Add("ExceptionMessage", cm.Message); httpContext.Response.StatusCode = 200; filterContext.ExceptionHandled = true; filterContext.HttpContext.Response.TrySkipIisCustomErrors = true; } else { httpContext.Response.Clear(); httpContext.Response.StatusCode = (Exception)ex is HttpException ? ((HttpException)(Exception)ex).GetHttpCode() : 500; httpContext.Response.TrySkipIisCustomErrors = true; Error404Controller controller = new Error404Controller(); routeData.Values["controller"] = CustomMessages.Error404; routeData.Values["action"] = CustomMessages._ErrorView; routeData.Values["ExceptionMessage"] = CustomMessages.ErrorPlzTryAgain; routeData.Values["IsAjaxRequest"] = filterContext.HttpContext.Request.IsAjaxRequest(); if (CustomExceptionType == Convert.ToString(ExpeptionTypes.LoginException)) { routeData.Values["ExceptionType"] = (Int32)ExceptionTypeEnum.LogoutWithAjaxRequest; } else { routeData.Values["ExceptionType"] = (Int32)ExceptionTypeEnum.Exception; if (CustomExceptionType == Convert.ToString(ExpeptionTypes.CustomMessage)) { CustomMessage cm = (CustomMessage)filterContext.Exception; routeData.Values["ExceptionMessage"] = cm.Message; } else { if (CustomExceptionType == Convert.ToString(ExpeptionTypes.CustomException)) { CustomException ce = (CustomException)filterContext.Exception; routeData.Values["ExceptionMessage"] = ce.Message; //ex = ce.Exception; } ErrorSignal.FromCurrentContext().Raise(ex); } } controller.ViewData.Model = new HandleErrorInfo(ex, currentController, currentAction); ((IController)controller).Execute(new RequestContext(filterContext.HttpContext, routeData)); } }