MVC - filterContext.ExceptionHandled

Is the filterContext.ExceptionHandled property ever set to true with MVC, or is it only set to true by user code? If so, where is this happening?

+6
source share
1 answer

filterContext.ExceptionHandled gets true when an exception is thrown by an action method. By default, HandleErrorAttribute added to the FilterConfig class, which is registered in Application_Start() . When an exception occurs, the OnException method OnException called in the HandleErrorAttribute class.

In the OnException method OnException before deleting the current HTTP response body using Response.Clear() ExceptionHandled property will be set to true.

The following is the default OnException method:

 public virtual 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; } 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; filterContext.HttpContext.Response.TrySkipIisCustomErrors = true; } 
+5
source

All Articles