Exemplo n.º 1
0
        /// <summary>
        /// 添加过滤器
        /// </summary>
        /// <param name="filter">过滤器</param>
        /// <exception cref="ArgumentNullException"></exception>
        /// <returns></returns>
        public static bool Add(IFilter filter)
        {
            if (filter == null)
            {
                throw new ArgumentNullException();
            }

            if (filter.AllowMultiple == false)
            {
                var allFilters = ActionFilters.Cast <IFilter>().Concat(AuthorizationFilters).Concat(ExceptionFilters);
                if (allFilters.Any(item => item.GetType() == filter.GetType()))
                {
                    return(false);
                }
            }

            var actionFilter        = filter as IActionFilter;
            var authorizationFilter = filter as IAuthorizationFilter;
            var exceptionFilter     = filter as IExceptionFilter;

            if (actionFilter != null)
            {
                ActionFilters = ActionFilters
                                .Concat(new[] { actionFilter })
                                .OrderBy(item => item.Order);
            }

            if (authorizationFilter != null)
            {
                AuthorizationFilters = AuthorizationFilters
                                       .Concat(new[] { authorizationFilter })
                                       .OrderBy(item => item.Order);
            }

            if (exceptionFilter != null)
            {
                ExceptionFilters = ExceptionFilters
                                   .Concat(new[] { exceptionFilter })
                                   .OrderBy(item => item.Order);
            }

            return(true);
        }