예제 #1
0
 /// <summary>
 /// Adds the authorization filter.
 /// </summary>
 /// <param name="filter">The filter.</param>
 protected virtual void AddAuthorizationFilter(IAuthorizationFilter filter)
 {
     if (!AuthorizationFilters.Contains(filter))
     {
         AuthorizationFilters.Add(filter);
     }
 }
        private void AddFilter(Filter filter)
        {
            if (filter == null)
            {
                throw new ArgumentNullException(nameof(filter));
            }

            var instance = filter.Instance;

            if (instance is IAuthenticationFilter authentication)
            {
                AuthenticationFilters.Add(new FilterInfo <IAuthenticationFilter>
                {
                    Filter = authentication,
                    Scope  = filter.Scope,
                    Order  = filter.Order
                });
            }

            if (instance is IAuthorizationFilter authorization)
            {
                AuthorizationFilters.Add(new FilterInfo <IAuthorizationFilter>
                {
                    Filter = authorization,
                    Scope  = filter.Scope,
                    Order  = filter.Order
                });
            }

            if (instance is IActionFilter action)
            {
                ActionFilters.Add(new FilterInfo <IActionFilter>
                {
                    Filter = action,
                    Scope  = filter.Scope,
                    Order  = filter.Order
                });
            }

            if (instance is IResultFilter result)
            {
                ResultFilters.Add(new FilterInfo <IResultFilter>
                {
                    Filter = result,
                    Scope  = filter.Scope,
                    Order  = filter.Order
                });
            }

            if (instance is IExceptionFilter exception)
            {
                ExceptionFilters.Add(new FilterInfo <IExceptionFilter>
                {
                    Filter = exception,
                    Scope  = filter.Scope,
                    Order  = filter.Order
                });
            }
        }
예제 #3
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);
        }