public virtual void OnException(ExceptionContext filterContext) { if (filterContext == null) { throw new ArgumentNullException("filterContext"); } if (filterContext.IsChildAction || (filterContext.ExceptionHandled || !filterContext.HttpContext.IsCustomErrorEnabled)) { return; } var innerException = filterContext.Exception; if ((new HttpException(null, innerException).GetHttpCode() != 500) || !ExceptionType.IsInstanceOfType(innerException)) { return; } var result = new HttpStatusCodeResult(StatusCode); filterContext.Result = result; filterContext.ExceptionHandled = true; filterContext.HttpContext.Response.Clear(); filterContext.HttpContext.Response.StatusCode = (int)StatusCode; filterContext.HttpContext.Response.TrySkipIisCustomErrors = true; }
public async Task OnActionExecutionAsync(ActionExecutingContext context, ActionExecutionDelegate next) { bool breakLoop = false; int tryCount = 0; do { tryCount++; ActionExecutedContext actionExecutedContext = await next(); if (actionExecutedContext.Exception != null && ExceptionType.IsInstanceOfType(actionExecutedContext.Exception) && tryCount < RetryCount) { actionExecutedContext.Exception = null; actionExecutedContext.ExceptionDispatchInfo = null; actionExecutedContext.Result = null; actionExecutedContext.Canceled = false; } else { breakLoop = true; if (actionExecutedContext.Result == null) { // TODO: Find a safer way to do this. object result = typeof(ControllerActionInvoker).GetField("_result", BindingFlags.NonPublic | BindingFlags.Instance).GetValue(next.Target); actionExecutedContext.Result = (IActionResult)result; } } } while (!breakLoop); }
public override void OnException(ExceptionContext context) { if (context.Exception == null) { context.ExceptionHandled = false; return; } if (!ExceptionType.IsInstanceOfType(context.Exception)) { context.ExceptionHandled = false; return; } ErrorResponse errorResponse = new ErrorResponse(); errorResponse.ErrorCode = Code; errorResponse.AddErrorMessage(Message); errorResponse.AdditionalInfo = context.Exception.Message; ObjectResult objectResult = new ObjectResult(errorResponse) { StatusCode = (int)StatusCode }; context.ExceptionHandled = true; context.Result = objectResult; _logger?.LogInformation($"Exception:{context.Exception.GetType()} is transfrormed."); }
/// <summary> /// to handling the error Exception details and displaying in UI /// </summary> /// <param name="filterContext"></param> public override void OnException(ExceptionContext filterContext) { if (filterContext.ExceptionHandled || !filterContext.HttpContext.IsCustomErrorEnabled) { return; } if (new HttpException(null, filterContext.Exception).GetHttpCode() != 500) { return; } if (!ExceptionType.IsInstanceOfType(filterContext.Exception)) { return; } //Skip checked exception //if (filterContext.Exception is FaultException<ValidationFault>) //{ // return; //} // if the request is AJAX return JSON else view. if (filterContext.HttpContext.Request.Headers["X-Requested-With"] == "XMLHttpRequest") { filterContext.Result = new JsonResult { JsonRequestBehavior = JsonRequestBehavior.AllowGet, Data = new { error = true, message = filterContext.Exception.Message } }; } else { var controllerName = (string)filterContext.RouteData.Values["controller"]; var actionName = (string)filterContext.RouteData.Values["action"]; var model = new HandleErrorInfo(filterContext.Exception, controllerName, actionName); filterContext.Result = new ViewResult { ViewName = View, MasterName = Master, ViewData = new ViewDataDictionary <HandleErrorInfo>(model), TempData = filterContext.Controller.TempData }; } // log the error using log4net. _logger.Error(filterContext.Exception.Message, filterContext.Exception); filterContext.ExceptionHandled = true; filterContext.HttpContext.Response.Clear(); filterContext.HttpContext.Response.StatusCode = 500; filterContext.HttpContext.Response.TrySkipIisCustomErrors = true; }
public override void OnException(ExceptionContext filterContext) { if (filterContext == null) { throw new ArgumentNullException("filterContext"); } if (filterContext.ExceptionHandled || !filterContext.HttpContext.IsCustomErrorEnabled) { return; } Exception exception = filterContext.Exception; if (!ExceptionType.IsInstanceOfType(exception)) { return; } string controllerName = (string)filterContext.RouteData.Values["controller"]; string actionName = (string)filterContext.RouteData.Values["action"]; HandleErrorInfo model = new HandleErrorInfo(filterContext.Exception, controllerName, actionName); filterContext.Result = new ViewResult { ViewName = View, MasterName = Master, ViewData = new ViewDataDictionary <HandleErrorInfo>(model), TempData = filterContext.Controller.TempData }; filterContext.ExceptionHandled = true; filterContext.HttpContext.Response.Clear(); filterContext.HttpContext.Response.StatusCode = new HttpException(null, exception).GetHttpCode(); filterContext.HttpContext.Response.TrySkipIisCustomErrors = true; }
//private static readonly ILog _log = LogManager.GetLogger(MethodBase.GetCurrentMethod().DeclaringType); // Custom errors is set to ON, for demo purposes some error information will display in Views/Shared/Error.cshtml public override void OnException(ExceptionContext filterContext) { if (!filterContext.HttpContext.IsCustomErrorEnabled) { return; } if (!ExceptionType.IsInstanceOfType(filterContext.Exception)) { return; } var controllerName = (string)filterContext.RouteData.Values["controller"]; var actionName = (string)filterContext.RouteData.Values["action"]; var model = new HandleErrorInfo(filterContext.Exception, controllerName, actionName); filterContext.Result = new ViewResult { ViewName = View, MasterName = Master, ViewData = new ViewDataDictionary<HandleErrorInfo>(model), TempData = filterContext.Controller.TempData }; filterContext.ExceptionHandled = true; filterContext.HttpContext.Response.Clear(); filterContext.HttpContext.Response.StatusCode = (int)HttpStatusCode.InternalServerError; filterContext.HttpContext.Response.TrySkipIisCustomErrors = true; // This is where we would Log Errors // _log.Error("Internal server error occurred while handling web request.", filterContext.Exception); }
public override void OnException(ExceptionContext filterContext) { if (filterContext.IsChildAction) { return; } // If custom errors are disabled, we need to let the normal ASP.NET exception handler // execute so that the user can see useful debugging information. if (filterContext.ExceptionHandled || !filterContext.HttpContext.IsCustomErrorEnabled) { return; } var exception = filterContext.Exception; // If this is not an HTTP 500 (for example, if somebody throws an HTTP 404 from an action method), // ignore it. if (new HttpException(null, exception).GetHttpCode() != 500) { return; } if (!ExceptionType.IsInstanceOfType(exception)) { return; } base.OnException(filterContext); exception.SendToAirbrake(); }
public override void OnException(ExceptionContext filterContext) { if (filterContext == null) { throw new ArgumentNullException("filterContext"); } //Record Log //LogUtility.WebLogger.Error( // string.Format("SenparcHandle错误。IP:{0}。页面:{1}", // filterContext.HttpContext.Request.UserHostName, // filterContext.HttpContext.Request.Url.PathAndQuery), // filterContext.Exception); // If custom errors are disabled, we need to let the normal ASP.NET exception handler // execute so that the user can see useful debugging information. if (filterContext.ExceptionHandled || !filterContext.HttpContext.IsCustomErrorEnabled) { return; } Exception exception = filterContext.Exception; // If this is not an HTTP 500 (for example, if somebody throws an HTTP 404 from an action method), // ignore it. if (new HttpException(null, exception).GetHttpCode() != 500) { return; } if (!ExceptionType.IsInstanceOfType(exception)) { return; } string controllerName = (string)filterContext.RouteData.Values["controller"]; string actionName = (string)filterContext.RouteData.Values["action"]; ExceptionViewModel vd = new ExceptionViewModel { HandleErrorInfo = new HandleErrorInfo(filterContext.Exception, controllerName, actionName) }; filterContext.Result = new ViewResult { ViewName = View, MasterName = Master, ViewData = new ViewDataDictionary <ExceptionViewModel>(vd), TempData = filterContext.Controller.TempData }; filterContext.ExceptionHandled = true; filterContext.HttpContext.Response.Clear(); filterContext.HttpContext.Response.StatusCode = 500; Logger.WebLogger.Error("500错误:" + exception.Message, exception); // Certain versions of IIS will sometimes use their own error page when // they detect a server error. Setting this property indicates that we // want it to try to render ASP.NET MVC's error page instead. filterContext.HttpContext.Response.TrySkipIisCustomErrors = true; }
public override void OnException(ExceptionContext filterContext) { // Handle only if CustomError is enabled and Exception is not handled elsewhere if (filterContext.HttpContext.IsCustomErrorEnabled && !filterContext.ExceptionHandled) { // TODO : Currently only handles 500 type exception. Need new strategy to handle other types (may be through Applicaton_Error event) var isStatus500 = new HttpException(null, filterContext.Exception).GetHttpCode() == 500; // Handle only StatusCode = 500 error. Other errors will be reported according to CustomError redirects if (isStatus500 && ExceptionType.IsInstanceOfType(filterContext.Exception)) { LogError(filterContext); EvaluateErrorResult(filterContext); FinalTouch(filterContext); } } else { base.OnException(filterContext); } }
public override void OnException(ExceptionContext filterContext) { if (filterContext.ExceptionHandled) { return; } if (new HttpException(null, filterContext.Exception).GetHttpCode() != 500) { return; } if (!ExceptionType.IsInstanceOfType(filterContext.Exception)) { return; } string controllerName = filterContext.GetController(); string actionName = filterContext.GetAction(); HandleErrorInfo model = new HandleErrorInfo(filterContext.Exception, controllerName, actionName); filterContext.Result = new ViewResult { ViewName = View, MasterName = Master, ViewData = new ViewDataDictionary <HandleErrorInfo>(model) }; //使用log4net写入本地日志 _logger.Error(filterContext.Exception.Message, filterContext.Exception); filterContext.HttpContext.Response.Clear(); filterContext.HttpContext.Response.StatusCode = 500; filterContext.HttpContext.Response.TrySkipIisCustomErrors = true; filterContext.ExceptionHandled = true; }
public override void OnException(ExceptionContext filterContext) { if (filterContext.ExceptionHandled || !filterContext.HttpContext.IsCustomErrorEnabled) { return; } if (new HttpException(null, filterContext.Exception).GetHttpCode() != 500) { return; } if (!ExceptionType.IsInstanceOfType(filterContext.Exception)) { return; } //Determine the return type of the action var controllerName = (string)filterContext.RouteData.Values["controller"]; var actionName = (string)filterContext.RouteData.Values["action"]; Type controllerType = filterContext.Controller.GetType(); var method = controllerType.GetMethod(actionName); var returnType = method.ReturnType; //If the action that generated the exception returns JSON if (returnType.Equals(typeof(JsonResult))) { filterContext.Result = new JsonResult() { JsonRequestBehavior = JsonRequestBehavior.AllowGet, Data = new { success = false, message = filterContext.Exception.Message, data = "", } }; } else { var model = new HandleErrorInfo(filterContext.Exception, controllerName, actionName); filterContext.Result = new ViewResult { ViewName = "Error/Index.cshtml", MasterName = Master, ViewData = new ViewDataDictionary <HandleErrorInfo>(model), TempData = filterContext.Controller.TempData }; } SfLogger.Instance.LogException(filterContext.Exception); filterContext.ExceptionHandled = true; filterContext.HttpContext.Response.Clear(); filterContext.HttpContext.Response.StatusCode = 500; filterContext.HttpContext.Response.TrySkipIisCustomErrors = true; }
/// <summary> /// Custom HandleErrorAttribute to return exceptions in controllers. /// /// If the request in an Ajax request, respond with a JSON message. /// Otherwise respond with a ViewResult. /// </summary> /// <param name="filterContext">Context of the exception</param> public override void OnException(ExceptionContext filterContext) { if (filterContext.ExceptionHandled || !filterContext.HttpContext.IsCustomErrorEnabled) { return; } if (new HttpException(null, filterContext.Exception).GetHttpCode() != 500) { return; } if (!ExceptionType.IsInstanceOfType(filterContext.Exception)) { return; } if (filterContext.HttpContext.Request.IsAjaxRequest()) { var title = string.Empty; var message = filterContext.Exception.Message; if (filterContext.Exception is ImageFetchException) { title = ((ImageFetchException)filterContext.Exception).Title; } filterContext.Result = new JsonNetResult(new { Error = true, Title = !string.IsNullOrWhiteSpace(title) ? title : "Error", Message = !string.IsNullOrWhiteSpace(message) ? message : "An error has occurred" }); } else { var controllerName = (string)filterContext.RouteData.Values["controller"]; var actionName = (string)filterContext.RouteData.Values["action"]; var model = new HandleErrorInfo(filterContext.Exception, controllerName, actionName); filterContext.Result = new ViewResult { ViewName = View, MasterName = Master, ViewData = new ViewDataDictionary <HandleErrorInfo>(model), TempData = filterContext.Controller.TempData }; } filterContext.ExceptionHandled = true; filterContext.HttpContext.Response.Clear(); filterContext.HttpContext.Response.StatusCode = 500; filterContext.HttpContext.Response.TrySkipIisCustomErrors = true; }
public override void OnException(ExceptionContext filterContext) { //base.OnException(filterContext); if (filterContext.ExceptionHandled || !filterContext.HttpContext.IsCustomErrorEnabled) { return; } if (new HttpException(null, filterContext.Exception).GetHttpCode() != 500) { return; } if (!ExceptionType.IsInstanceOfType(filterContext.Exception)) { return; } //如果是AJAX请求返回json if (filterContext.HttpContext.Request.Headers["X-Requested-With"] == "XMLHttpRequest") { //filterContext.Result = new JsonResult() //{ // JsonRequestBehavior = JsonRequestBehavior.AllowGet, // Data = new // { // error = true, // message = filterContext.Exception.Message // } //}; var controllerName = (string)filterContext.RouteData.Values["controller"]; var actionName = (string)filterContext.RouteData.Values["action"]; var model = new HandleErrorInfo(filterContext.Exception, controllerName, actionName); filterContext.Result = new ViewResult() { ViewName = View, MasterName = Master, ViewData = new ViewDataDictionary(model), TempData = filterContext.Controller.TempData }; } else { var controllerName = (string)filterContext.RouteData.Values["controller"]; var actionName = (string)filterContext.RouteData.Values["action"]; var model = new HandleErrorInfo(filterContext.Exception, controllerName, actionName); filterContext.Result = new ViewResult() { ViewName = View, MasterName = Master, ViewData = new ViewDataDictionary(model), TempData = filterContext.Controller.TempData }; } LoggerHelper.Error(filterContext.Exception.Message, filterContext.Exception); filterContext.ExceptionHandled = true; filterContext.HttpContext.Response.Clear(); filterContext.HttpContext.Response.StatusCode = 500; filterContext.HttpContext.Response.TrySkipIisCustomErrors = true; }
public void OnException(ExceptionContext filterContext) { if (filterContext == null) { throw new ArgumentNullException("filterContext"); } if (filterContext.IsChildAction || (filterContext.ExceptionHandled || !filterContext.HttpContext.IsCustomErrorEnabled)) { return; } var innerException = filterContext.Exception; // if the request is AJAX return JSON else view. if (filterContext.HttpContext.Request.Headers["X-Requested-With"] == "XMLHttpRequest") { filterContext.Result = new JsonResult { JsonRequestBehavior = JsonRequestBehavior.AllowGet, Data = new { error = true, message = filterContext.Exception.Message } }; } else { // adding the internal server error (500 status http code) if ((new HttpException(null, innerException).GetHttpCode() != 500) || !ExceptionType.IsInstanceOfType(innerException)) { return; } var controllerName = (string)filterContext.RouteData.Values["controller"]; var actionName = (string)filterContext.RouteData.Values["action"]; var model = new HandleErrorInfo(filterContext.Exception, controllerName, actionName); // checking for Ajax request if (filterContext.HttpContext.Request.IsAjaxRequest()) { var result = new PartialViewResult { ViewName = string.IsNullOrEmpty(View) ? DefaultAjaxView : View, ViewData = new ViewDataDictionary <HandleErrorInfo>(model), TempData = filterContext.Controller.TempData }; filterContext.Result = result; } else { var result = CreateActionResult(filterContext, model); filterContext.Result = result; } } filterContext.ExceptionHandled = true; }
public override void OnException(ExceptionContext filterContext) { if (filterContext.ExceptionHandled || !filterContext.HttpContext.IsCustomErrorEnabled) { return; } if (new HttpException(null, filterContext.Exception).GetHttpCode() != 500) { return; } if (!ExceptionType.IsInstanceOfType(filterContext.Exception)) { return; } // if the request is AJAX return JSON else view. if (filterContext.HttpContext.Request.Headers["X-Requested-With"] == "XMLHttpRequest") { filterContext.Result = new JsonResult { JsonRequestBehavior = JsonRequestBehavior.AllowGet, Data = new { error = true, message = filterContext.Exception.Message } }; } else { var controllerName = (string)filterContext.RouteData.Values["controller"]; var actionName = (string)filterContext.RouteData.Values["action"]; var model = new HandleErrorInfo(filterContext.Exception, controllerName, actionName); filterContext.Result = new ViewResult { ViewName = View, MasterName = Master, ViewData = new ViewDataDictionary(model), TempData = filterContext.Controller.TempData }; } // log the error by using your own method var logger = new CommonHelper.Logger(); logger.WriteLog(CommonHelper.MessageType.Exception.ToString(), filterContext.Exception.Message.ToString(), View.ToString(), filterContext.Controller.ToString(), HttpContext.Current.User.Identity.Name.ToString()); logger = null; filterContext.ExceptionHandled = true; filterContext.HttpContext.Response.Clear(); filterContext.HttpContext.Response.StatusCode = 500; filterContext.HttpContext.Response.TrySkipIisCustomErrors = true; }
/// <summary> /// Called when an exception occurs. /// </summary> /// <param name="exceptionContext">The exception context.</param> public override void OnException(ExceptionContext exceptionContext) { if (exceptionContext.ExceptionHandled /* || !exceptionContext.HttpContext.IsCustomErrorEnabled*/) { return; } if (new HttpException(null, exceptionContext.Exception).GetHttpCode() != 500) { return; } if (!ExceptionType.IsInstanceOfType(exceptionContext.Exception)) { return; } // if the request is AJAX return JSON else view. // http://stackoverflow.com/questions/4707755/asp-net-mvc-ajax-error-handling if (exceptionContext.HttpContext.Request.IsAjaxRequest() && exceptionContext.Exception != null) { exceptionContext.Result = new JsonResult { JsonRequestBehavior = JsonRequestBehavior.AllowGet, Data = new { error = true, message = exceptionContext.Exception.Message, // todo: replace the message with more general message like http://stackoverflow.com/questions/9120002/jquery-ajax-error-handling //stackTrace = exceptionContext.Exception.StackTrace } }; exceptionContext.ExceptionHandled = true; } else { var controllerName = (string)exceptionContext.RouteData.Values["controller"]; var actionName = (string)exceptionContext.RouteData.Values["action"]; var model = new HandleErrorInfo(exceptionContext.Exception, controllerName, actionName); exceptionContext.Result = new ViewResult { ViewName = View, MasterName = Master, ViewData = new ViewDataDictionary <HandleErrorInfo> (model), TempData = exceptionContext.Controller.TempData }; } _logger.Fatal(exceptionContext.Exception.Message, exceptionContext.Exception); exceptionContext.ExceptionHandled = true; exceptionContext.HttpContext.Response.Clear(); exceptionContext.HttpContext.Response.StatusCode = 500; exceptionContext.HttpContext.Response.TrySkipIisCustomErrors = true; }
public override void OnException(ExceptionContext filterContext) { //base.OnException(filterContext); if (filterContext == null) { throw new ArgumentNullException("filterContext"); } if (filterContext.IsChildAction) { return; } // If custom errors are disabled, we need to let the normal ASP.NET exception handler // execute so that the user can see useful debugging information. if (filterContext.ExceptionHandled || !filterContext.HttpContext.IsCustomErrorEnabled) { return; } Exception exception = filterContext.Exception; // If this is not an HTTP 500 (for example, if somebody throws an HTTP 404 from an action method), // ignore it. if (new HttpException(null, exception).GetHttpCode() != 500) { return; } if (!ExceptionType.IsInstanceOfType(exception)) { return; } string controllerName = (string)filterContext.RouteData.Values["controller"]; string actionName = (string)filterContext.RouteData.Values["action"]; HandleErrorInfo model = new HandleErrorInfo(filterContext.Exception, controllerName, actionName); filterContext.Result = new ViewResult { ViewName = View, MasterName = Master, ViewData = new ViewDataDictionary <HandleErrorInfo>(model), TempData = filterContext.Controller.TempData }; filterContext.ExceptionHandled = true; filterContext.HttpContext.Response.Clear(); filterContext.HttpContext.Response.StatusCode = 500; // Certain versions of IIS will sometimes use their own error page when // they detect a server error. Setting this property indicates that we // want it to try to render ASP.NET MVC's error page instead. filterContext.HttpContext.Response.TrySkipIisCustomErrors = true; //filterContext.HttpContext.Response.AddHeader(CustomHttpHeader.ErrorHandled, "true"); //to log the error logger.HandleException(model.Exception, "DongboErrorHandler.ExceptionFilter"); }
public override void OnException(ExceptionContext filterContext) { if (filterContext.ExceptionHandled || !filterContext.HttpContext.IsCustomErrorEnabled) { return; } if (new HttpException(null, filterContext.Exception).GetHttpCode() != 500) { return; } if (!ExceptionType.IsInstanceOfType(filterContext.Exception)) { return; } // If request is AJAX Call from client to server silde return Json view if (filterContext.HttpContext.Request.Headers["X-Requested-With"] == "XMLHttpRequest") { filterContext.Result = new JsonResult { JsonRequestBehavior = JsonRequestBehavior.AllowGet, Data = new { error = true, message = filterContext.Exception.Message } }; } else { var controllerName = (string)filterContext.RouteData.Values["controller"]; var actionName = (string)filterContext.RouteData.Values["action"]; var model = new HandleErrorInfo(filterContext.Exception, controllerName, actionName); filterContext.Result = new ViewResult { ViewName = View, MasterName = Master, ViewData = new ViewDataDictionary <HandleErrorInfo>(model), TempData = filterContext.Controller.TempData }; } // Log Error using log4net var stackTree = new StackTrace(filterContext.Exception, true); //Get the stop stack Frame var frame = stackTree.GetFrame(stackTree.FrameCount - 1); var line = frame.GetFileLineNumber(); _logger.Error(filterContext.Exception.Message + "line:" + line, filterContext.Exception); filterContext.ExceptionHandled = true; filterContext.HttpContext.Response.Clear(); filterContext.HttpContext.Response.TrySkipIisCustomErrors = true; base.OnException(filterContext); }
/// <summary> /// Called when an exception occurs. /// </summary> /// <param name="context">The exception context.</param> public override void OnException(ExceptionContext context) { if (context == null) { throw new ArgumentNullException("context"); } //If exception handled before, do nothing. //If this is child action, exception should be handled by main action. if (context.ExceptionHandled || context.IsChildAction) { return; } //Always log exception LogHelper.LogException(Logger, context.Exception); // If custom errors are disabled, we need to let the normal ASP.NET exception handler // execute so that the user can see useful debugging information. if (!context.HttpContext.IsCustomErrorEnabled) { return; } // If this is not an HTTP 500 (for example, if somebody throws an HTTP 404 from an action method), // ignore it. if (new HttpException(null, context.Exception).GetHttpCode() != 500) { return; } //Do not handle exceptions for attributes configured for special exception types and this exceptiod does not fit condition. if (!ExceptionType.IsInstanceOfType(context.Exception)) { return; } //We handled the exception! // 判断是否ajax请求 context.Result = IsAjaxRequest(context) ? GenerateAjaxResult(context) : GenerateNonAjaxResult(context); context.HttpContext.Response.Clear(); context.ExceptionHandled = true; // Certain versions of IIS will sometimes use their own error page when // they detect a server error. Setting this property indicates that we // want it to try to render ASP.NET MVC's error page instead. // context.HttpContext.Response.TrySkipIisCustomErrors = true; context.HttpContext.Response.TrySkipIisCustomErrors = true; //Trigger an event, so we can register it. EventBus.Trigger(new EddoHandledExceptionData(context.Exception)); }
/// <summary> /// Called when an exception occurs. /// </summary> /// <param name="filterContext">The action-filter context.</param> public override void OnException(ExceptionContext filterContext) { if (filterContext.ExceptionHandled || !filterContext.HttpContext.IsCustomErrorEnabled) { return; } if (new HttpException(null, filterContext.Exception).GetHttpCode() != 500) { return; } if (!ExceptionType.IsInstanceOfType(filterContext.Exception)) { return; } // if the request is AJAX return JSON else view. //http://stackoverflow.com/questions/4707755/asp-net-mvc-ajax-error-handling if (filterContext.HttpContext.Request.IsAjaxRequest() && filterContext.Exception != null)//(filterContext.HttpContext.Request.Headers["X-Requested-With"] == "XMLHttpRequest") { filterContext.Result = new JsonResult { JsonRequestBehavior = JsonRequestBehavior.AllowGet, Data = new { error = true, message = filterContext.Exception.Message, stackTrace = filterContext.Exception.StackTrace } }; filterContext.ExceptionHandled = true; } else { var controllerName = (string)filterContext.RouteData.Values["controller"]; var actionName = (string)filterContext.RouteData.Values["action"]; var model = new HandleErrorInfo(filterContext.Exception, controllerName, actionName); filterContext.Result = new ViewResult { ViewName = View, MasterName = Master, ViewData = new ViewDataDictionary <HandleErrorInfo>(model), TempData = filterContext.Controller.TempData }; } logger.Error(filterContext.Exception.Message, filterContext.Exception); filterContext.ExceptionHandled = true; filterContext.HttpContext.Response.Clear(); filterContext.HttpContext.Response.StatusCode = 500; filterContext.HttpContext.Response.TrySkipIisCustomErrors = true; }
public override void OnException(ExceptionContext filterContext) { if (filterContext.ExceptionHandled || !filterContext.HttpContext.IsCustomErrorEnabled) { return; } if (new HttpException(null, filterContext.Exception).GetHttpCode() != 500) { return; } if (!ExceptionType.IsInstanceOfType(filterContext.Exception)) { return; } // if the request is AJAX return JSON else view. if (IsAjax(filterContext)) { filterContext.Result = new JsonResult { JsonRequestBehavior = JsonRequestBehavior.AllowGet, Data = new { error = true, message = filterContext.Exception.Message } }; } else { var controllerName = (string)filterContext.RouteData.Values["controller"]; var actionName = (string)filterContext.RouteData.Values["action"]; var model = new SecurityPortalErrorInfo(filterContext.Exception, controllerName, actionName); model.ErrorId = String.Empty; filterContext.Result = new ViewResult { ViewName = View, MasterName = Master, ViewData = new ViewDataDictionary <HandleErrorInfo>(model), TempData = filterContext.Controller.TempData }; } // log the error using log4net. //_logger.Error(filterContext.Exception.Message, filterContext.Exception); filterContext.ExceptionHandled = true; filterContext.HttpContext.Response.Clear(); filterContext.HttpContext.Response.StatusCode = 500; filterContext.HttpContext.Response.TrySkipIisCustomErrors = true; }
public override void OnException(ExceptionContext filterContext) { if (filterContext.ExceptionHandled)//Exception daha önceden handle edilmişse { return; } if (!ExceptionType.IsInstanceOfType(filterContext.Exception)) { return; } // İstek AJAX ile gelmişse JSON döndür if (filterContext.HttpContext.Request.IsAjaxRequest()) { int httpCode = new HttpException(null, filterContext.Exception).GetHttpCode(); filterContext.HttpContext.Response.StatusCode = 500; filterContext.Result = new JsonResult { JsonRequestBehavior = JsonRequestBehavior.AllowGet, Data = new ExecuteResult { Succeeded = false, ResultMessage = filterContext.Exception.Message } }; } // log the error using log4net. Context.Logger.Error(filterContext.Exception.Message, filterContext.Exception); filterContext.ExceptionHandled = true; filterContext.HttpContext.Response.Clear(); filterContext.HttpContext.Response.TrySkipIisCustomErrors = true; //İstek ajax değilse view döndür if (!filterContext.HttpContext.Request.IsAjaxRequest()) { int httpCode = new HttpException(null, filterContext.Exception).GetHttpCode(); switch (httpCode) { case 401: filterContext.Controller.TempData["AppError"] = "Sayfaya erişim yetkiniz yoktur"; filterContext.HttpContext.Response.Redirect("~/Error/AuthorizationError"); break; default: filterContext.Controller.TempData["AppError"] = "Şu anda işleminiz gerçekleştirilememektedir.Lütfen daha sonra tekrar deneyin."; filterContext.HttpContext.Response.Redirect("~/Error/Index"); break; } } }
public override void OnException(ExceptionContext filterContext) { base.OnException(filterContext); Log log = LogFactory.GetLogger(filterContext.Exception.Source); log.Error(filterContext.Exception.Message); if (filterContext.ExceptionHandled || !filterContext.HttpContext.IsCustomErrorEnabled) { return; } if (new HttpException(null, filterContext.Exception).GetHttpCode() != 500) { return; } if (!ExceptionType.IsInstanceOfType(filterContext.Exception)) { return; } if (filterContext.HttpContext.Request.Headers["X-Requested-With"] == "XMLHttpRequest") { filterContext.Result = new JsonResult { JsonRequestBehavior = JsonRequestBehavior.AllowGet, Data = new { error = true, message = filterContext.Exception.Message } }; } else { var controllerName = (string)filterContext.RouteData.Values["controller"]; var actionName = (string)filterContext.RouteData.Values["action"]; var model = new HandleErrorInfo(filterContext.Exception, controllerName, actionName); filterContext.Result = new ViewResult { ViewName = View, MasterName = Master, ViewData = new ViewDataDictionary(model), TempData = filterContext.Controller.TempData }; } filterContext.ExceptionHandled = true; filterContext.HttpContext.Response.Clear(); filterContext.HttpContext.Response.StatusCode = 500; filterContext.HttpContext.Response.TrySkipIisCustomErrors = true; }
//private static readonly ILog _log = LogManager.GetLogger(MethodBase.GetCurrentMethod().DeclaringType); public override void OnException(ExceptionContext filterContext) { if (!filterContext.HttpContext.IsCustomErrorEnabled) { return; } if (!ExceptionType.IsInstanceOfType(filterContext.Exception)) { return; } if (filterContext.Exception is HttpAntiForgeryException) { filterContext.ExceptionHandled = true; filterContext.HttpContext.Response.Clear(); string afgMessage = "Invalid post from URL" + filterContext.HttpContext.Request.Url.ToString(); Logger.LogError("USAS - Antiforgery Error", afgMessage); return; } if (filterContext.Exception is HttpRequestValidationException) { filterContext.ExceptionHandled = true; filterContext.HttpContext.Response.Clear(); string xssMessage = "Invalid request sent: " + filterContext.Exception.Message; Logger.LogError("USAS - XSS Error", xssMessage); return; } var controllerName = (string)filterContext.RouteData.Values["controller"]; var actionName = (string)filterContext.RouteData.Values["action"]; var model = new HandleErrorInfo(filterContext.Exception, controllerName, actionName); filterContext.Result = new ViewResult { ViewName = View, MasterName = Master, ViewData = new ViewDataDictionary <HandleErrorInfo>(model), TempData = filterContext.Controller.TempData }; filterContext.ExceptionHandled = true; filterContext.HttpContext.Response.Clear(); filterContext.HttpContext.Response.StatusCode = (int)HttpStatusCode.InternalServerError; filterContext.HttpContext.Response.TrySkipIisCustomErrors = true; string errMsg = "Error in Controller: " + controllerName + " Action: " + actionName + " Error: " + model.Exception.Message; Logger.LogError("USAS - Unhandled Error", errMsg); }
public override void OnException(ExceptionContext filterContext) { if (filterContext == null) { throw new ArgumentNullException("filterContext"); } if (filterContext.IsChildAction) { return; } if (filterContext.ExceptionHandled || !filterContext.HttpContext.IsCustomErrorEnabled) { return; } Exception exception = filterContext.Exception; if (new HttpException(null, exception).GetHttpCode() != 500) { return; } if (!ExceptionType.IsInstanceOfType(exception)) { return; } var guid = GuidHelper.GenerateGuid(); var controllerName = (string)filterContext.RouteData.Values["controller"]; var actionName = (string)filterContext.RouteData.Values["action"]; var model = new HandleErrorInfoLogged(filterContext.Exception, controllerName, actionName, guid); filterContext.Result = new ViewResult { ViewName = View, MasterName = Master, ViewData = new ViewDataDictionary <HandleErrorInfoLogged>(model), TempData = filterContext.Controller.TempData }; filterContext.ExceptionHandled = true; filterContext.HttpContext.Response.Clear(); filterContext.HttpContext.Response.StatusCode = (int)HttpStatusCode.InternalServerError; filterContext.HttpContext.Response.TrySkipIisCustomErrors = true; var logger = UnityConfig.GetLogger(); logger.Error($"Identifiant de l'erreur : {guid}", filterContext.Exception); }
public override void OnException(ExceptionContext filterContext) { if (filterContext.ExceptionHandled) { return; } if (new HttpException(null, filterContext.Exception).GetHttpCode() != 500) { return; } if (!ExceptionType.IsInstanceOfType(filterContext.Exception)) { return; } h_excepcion excepcion = new h_excepcion(); excepcion.fe_excepcion = DateTime.Now; excepcion.ds_excepcion = filterContext.Exception.Message; excepcion.nb_metodo = filterContext.Controller.ControllerContext.RouteData.Values["action"].ToString(); var aux = filterContext.Controller.GetType().GetCustomAttributesData(); string funcion = ""; foreach (var attribute in aux) { //if (attribute.AttributeType.Name == "OverloadAvoiderAttribute") return; if (attribute.AttributeType.Name == "AccessAttribute") { funcion = (string)attribute.NamedArguments[0].TypedValue.Value; if (funcion == null) { //Regresar una vista con buena presentacion con los datos del error return; } break; } } excepcion.id_funcion = utilidades.IdFuncion(funcion); db.h_excepcion.Add(excepcion); db.SaveChanges(); //Regresar una vista con buena presentacion con los datos del error return; }
public override void OnException(ExceptionContext filterContext) { if (!ExceptionType.IsInstanceOfType(filterContext.Exception)) { return; } if (filterContext.HttpContext.Request.IsAjaxRequest()) { Func <Exception, object> getGlobalError = null; getGlobalError = e => { if (e == null) { return(null); } var globalError = new { ErrorMessage = e.Message, StackTrace = e.StackTrace, InnerException = getGlobalError(e.InnerException) }; return(globalError); }; var data = getGlobalError(filterContext.Exception); filterContext.Result = new JsonResult { Data = data, ContentType = "text/html", ContentEncoding = System.Text.Encoding.UTF8, JsonRequestBehavior = JsonRequestBehavior.AllowGet }; filterContext.ExceptionHandled = true; filterContext.HttpContext.Response.Clear(); filterContext.HttpContext.Response.StatusCode = 500; filterContext.HttpContext.Response.TrySkipIisCustomErrors = true; } else { base.OnException(filterContext); } }
public override void OnException(ExceptionContext filterContext) { if (filterContext == null) { throw new ArgumentNullException("filterContext is null"); } // If custom errors are disabled, we need to let the normal ASP.NET exception handler // execute so that the user can see useful debugging information. if (filterContext.ExceptionHandled || !filterContext.HttpContext.IsCustomErrorEnabled) { return; } //status !=500 return if (new HttpException(null, filterContext.Exception).GetHttpCode() != 500) { return; } if (!ExceptionType.IsInstanceOfType(filterContext.Exception)) { return; } string controllerName = (string)filterContext.RouteData.Values["controller"]; string actionName = (string)filterContext.RouteData.Values["action"]; var model = new HandleErrorInfo(filterContext.Exception, controllerName, actionName); filterContext.Result = new ViewResult { ViewName = View, MasterName = Master, ViewData = new ViewDataDictionary <HandleErrorInfo>(model), TempData = filterContext.Controller.TempData }; log.WriteExceptionLog(filterContext.Exception.StackTrace); filterContext.ExceptionHandled = true; filterContext.HttpContext.Response.Clear(); filterContext.HttpContext.Response.StatusCode = new HttpException(null, filterContext.Exception).GetHttpCode(); // Certain versions of IIS will sometimes use their own error page when // they detect a server error. Setting this property indicates that we // want it to try to render ASP.NET MVC's error page instead. filterContext.HttpContext.Response.TrySkipIisCustomErrors = false; }
public override void OnException(ExceptionContext filterContext) { if (filterContext.ExceptionHandled) { return; // || !filterContext.HttpContext.IsCustomErrorEnabled } if (new HttpException(null, filterContext.Exception).GetHttpCode() != 500) { filterContext.HttpContext.Response.Redirect(String.Format("~/Error/Application")); } if (!ExceptionType.IsInstanceOfType(filterContext.Exception)) { filterContext.HttpContext.Response.Redirect(String.Format("~/Error/Application")); } // if the request is AJAX return JSON else view. if (IsAjaxRequest(filterContext)) { // return Json to client as it is a ajax request filterContext.Result = new JsonResult { JsonRequestBehavior = JsonRequestBehavior.AllowGet, Data = new { action = "redirect", controller = "error", page = "application" } }; filterContext.ExceptionHandled = true; filterContext.HttpContext.Response.Clear(); } else { // Normal Exception base.OnException(filterContext); } // TODO: Write error logging code ... //if want to get to the source of the request //var currentController = (string)filterContext.RouteData.Values["controller"]; //var currentActionName = (string)filterContext.RouteData.Values["action"]; }
public override void OnException(ExceptionContext filterContext) { if (filterContext.ExceptionHandled || !ExceptionType.IsInstanceOfType(filterContext.Exception)) { return; } var redirectTarget = new RouteValueDictionary { { "action", Action }, { "controller", Controller } }; filterContext.Result = new RedirectToRouteResult(redirectTarget); filterContext.ExceptionHandled = true; filterContext.HttpContext.Response.Clear(); }