public void OnException(ExceptionContext context) { Precondition.Require(context, () => Error.ArgumentNull("context")); Controller controller = (context.Controller as Controller); if (controller == null || context.Handled || !context.Context.IsCustomErrorEnabled) return; Exception exception = context.Exception; if (new HttpException(null, exception).GetHttpCode() != 500) return; if (exception is TargetInvocationException) exception = exception.InnerException; if (!_type.IsInstanceOfType(exception)) return; ErrorHandlerInfo model = new ErrorHandlerInfo(context.Exception); context.Handled = true; context.Context.Response.Clear(); if(!context.IsChild) context.Context.Response.StatusCode = 500; if (String.IsNullOrEmpty(_view)) context.Result = EmptyResult.Instance; else context.Result = new ViewResult() { TempData = controller.TempData, ViewData = new ViewDataDictionary<ErrorHandlerInfo>(model), ViewName = View }; }
public void OnException(ExceptionContext ctx) { HttpContextBase context = ctx.Context; // We should remove any response filters since // we'll get invalid response if an exception is thrown. if (context.Items.Contains(COMPRESS_ENABLED_KEY)) { TryRemoveHeaders(context); context.Response.Filter = _original; } }
protected virtual ExceptionContext InvokeExceptionFilters( ControllerContext context, Exception exception, ICollection<IExceptionFilter> filters) { Precondition.Require(exception, () => Error.ArgumentNull("exception")); Precondition.Require(filters, () => Error.ArgumentNull("filters")); ExceptionContext filterContext = new ExceptionContext(context, exception); foreach (IExceptionFilter filter in filters) filter.OnException(filterContext); return filterContext; }