/// <summary> /// Initializes a new instance of the <see cref="ResultExecutedContext"/> class. /// </summary> /// <param name="controllerContext">The controller context.</param> /// <param name="result">The result.</param> /// <param name="exception">An exception that may have been thrown.</param> public ResultExecutedContext(ControllerContext controllerContext, ActionResult result, Exception exception) { this.result = result; Exception = exception; this.controllerContext = controllerContext; }
/// <summary> /// Initializes a new instance of the <see cref="ResultExecutingContext"/> class. /// </summary> /// <param name="controllerContext">The controller context.</param> /// <param name="result">The result.</param> public ResultExecutingContext(ControllerContext controllerContext, ActionResult result) { Result = result; this.controllerContext = controllerContext; }
/// <summary> /// Invokes all post-request filters after the controller has been invoked. /// </summary> /// <param name="controllerContext">The controller context.</param> /// <param name="result">The result.</param> /// <param name="ex">The ex.</param> /// <param name="filters">The filters.</param> /// <returns></returns> protected virtual ActionExecutedContext ExecutePostActionFilters(ControllerContext controllerContext, ActionResult result, Exception ex, IEnumerable<IActionFilter> filters) { controllerContext.Request.ReportProgress(new PostActionFiltersNavigationEvent()); var executedContext = new ActionExecutedContext(controllerContext, result, ex); foreach (var filter in filters) { filter.OnActionExecuted(executedContext); } return executedContext; }
/// <summary> /// Invokes all pre-result filters, before the result has been invoked. /// </summary> /// <param name="controllerContext">The controller context.</param> /// <param name="result">The result.</param> /// <param name="resultFilters">The result filters.</param> /// <returns></returns> protected virtual ResultExecutingContext ExecutePreResultFilters(ControllerContext controllerContext, ActionResult result, IEnumerable<IResultFilter> resultFilters) { controllerContext.Request.ReportProgress(new PreResultFiltersNavigationEvent()); var context = new ResultExecutingContext(controllerContext, result); foreach (var filter in resultFilters) { filter.OnResultExecuting(context); if (context.Cancel) { return context; } } return context; }
/// <summary> /// Invokes all post-result filters, after the result has been invoked. /// </summary> /// <param name="controllerContext">The controller context.</param> /// <param name="actionResult">The action result.</param> /// <param name="exception">The exception.</param> /// <param name="resultFilters">The result filters.</param> /// <returns></returns> protected virtual ResultExecutedContext ExecutePostResultFilters(ControllerContext controllerContext, ActionResult actionResult, Exception exception, IEnumerable<IResultFilter> resultFilters) { controllerContext.Request.ReportProgress(new PostResultFiltersNavigationEvent()); var context = new ResultExecutedContext(controllerContext, actionResult, exception); foreach (var filter in resultFilters) { filter.OnResultExecuted(context); } return context; }
private void ExecuteResult(IActionDescriptor actionDescriptor, ControllerContext controllerContext, string actionName, ActionResult actionResult) { if (actionResult == null) return; var resultFilters = FindResultFilters(actionDescriptor, controllerContext, actionName); var preResultContext = ExecutePreResultFilters(controllerContext, actionResult, resultFilters); if (preResultContext.Cancel) return; actionResult = preResultContext.Result; controllerContext.Request.ReportProgress(new ExecutingResultNavigationEvent()); try { actionResult.Execute(controllerContext); } catch (Exception ex) { var errorResult = ExecutePostResultFilters(controllerContext, actionResult, ex, resultFilters); if (errorResult.ExceptionHandled || errorResult.Exception == null) return; if (errorResult.Exception == ex) throw; throw errorResult.Exception; } var successResult = ExecutePostResultFilters(controllerContext, actionResult, null, resultFilters); if (successResult.ExceptionHandled || successResult.Exception == null) return; throw successResult.Exception; }