/// <summary>
        /// When implemented in a derived class, finds all pre and post <see cref="IResultFilter">result filters</see> that apply to the given action.
        /// </summary>
        /// <param name="action">The action.</param>
        /// <param name="controllerContext">The controller context.</param>
        /// <param name="actionName">Name of the action.</param>
        /// <returns></returns>
        protected override IEnumerable<IResultFilter> FindResultFilters(IActionDescriptor action, ControllerContext controllerContext, string actionName)
        {
            Guard.ArgumentNotNull(action, "action");
            Guard.ArgumentNotNull(controllerContext, "controllerContext");
            Guard.ArgumentNotNullOrEmpty(actionName, "actionName");
            Guard.ArgumentIsOfType(action, typeof(DelegateActionDescriptor), "action");

            var delegateDescriptor = (DelegateActionDescriptor)action;
            var attributeSources = new ICustomAttributeProvider[] { delegateDescriptor.Method, controllerContext.Controller.GetType() };
            var filters = attributeSources.SelectMany(x => x.GetCustomAttributes(true)).Select(x => x as IResultFilter).Where(x => x != null).ToList();
            TraceSources.MagellanSource.TraceVerbose("DefaultActionInvoker found the following result filters for action '{0}': '{1}'.", actionName, 
                string.Join(", ", filters.Select(x => x.GetType().Name).ToArray())
                );
            return filters;
        }
Example #2
0
        /// <summary>
        /// When implemented in a derived class, finds all pre and post <see cref="IResultFilter">result filters</see> that apply to the given action.
        /// </summary>
        /// <param name="action">The action.</param>
        /// <param name="controllerContext">The controller context.</param>
        /// <param name="actionName">Name of the action.</param>
        /// <returns></returns>
        protected override IEnumerable <IResultFilter> FindResultFilters(IActionDescriptor action, ControllerContext controllerContext, string actionName)
        {
            Guard.ArgumentNotNull(action, "action");
            Guard.ArgumentNotNull(controllerContext, "controllerContext");
            Guard.ArgumentNotNullOrEmpty(actionName, "actionName");
            Guard.ArgumentIsOfType(action, typeof(DelegateActionDescriptor), "action");

            var delegateDescriptor = (DelegateActionDescriptor)action;
            var attributeSources   = new ICustomAttributeProvider[] { delegateDescriptor.Method, controllerContext.Controller.GetType() };
            var filters            = attributeSources.SelectMany(x => x.GetCustomAttributes(true)).Select(x => x as IResultFilter).Where(x => x != null).ToList();

            TraceSources.MagellanSource.TraceVerbose("DefaultActionInvoker found the following result filters for action '{0}': '{1}'.", actionName,
                                                     string.Join(", ", filters.Select(x => x.GetType().Name).ToArray())
                                                     );
            return(filters);
        }