/// <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;
 }
示例#3
0
        /// <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;
        }
示例#4
0
        /// <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;
        }
示例#5
0
        /// <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;
        }
示例#6
0
        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;
        }