Beispiel #1
0
 internal IEnumerable <FilterAttribute> GetFilterAttributes(bool useCache)
 {
     if (useCache)
     {
         return(ReflectedAttributeCache.GetMethodFilterAttributes(this.MethodInfo));
     }
     return(this.GetCustomAttributes(typeof(FilterAttribute), true).Cast <FilterAttribute>());
 }
Beispiel #2
0
 internal IEnumerable <FilterAttribute> GetFilterAttributes(bool useCache)
 {
     if (useCache)
     {
         return(ReflectedAttributeCache.GetTypeFilterAttributes(this.ControllerType));
     }
     return(this.GetCustomAttributes(typeof(FilterAttribute), true).Cast <FilterAttribute>());
 }
Beispiel #3
0
        /// <summary>
        /// 查找别名匹配的方法
        /// </summary>
        /// <param name="controllerContext"></param>
        /// <param name="actionName"></param>
        /// <returns></returns>
        internal List <MethodInfo> GetMatchingAliasedMethods(ControllerContext controllerContext, string actionName)
        {
            IEnumerable <MethodInfo> source =
                from methodInfo in this.AliasedMethods
                let attrs = ReflectedAttributeCache.GetActionNameSelectorAttributes(methodInfo)
                            where attrs.All((ActionNameSelectorAttribute attr) => attr.IsValidName(controllerContext, actionName, methodInfo))
                            select methodInfo;

            return(source.ToList <MethodInfo>());
        }
        /// <summary>
        /// 根据url获取类型
        /// </summary>
        /// <param name="url"></param>
        /// <returns></returns>
        private Tuple <Type, MethodInfo> GetTypeByUrl(string url)
        {
            ControllerTypeCache.EnsureInitialized();
            foreach (var type in ControllerTypeCache.AllTypes)
            {
                foreach (var method in type.GetMethods(ActionBindingFlags))
                {
                    foreach (var attr in ReflectedAttributeCache.GetPageUrlAttributes(method))
                    {
                        base.Cache[attr.UniqueId] = new Tuple <Type, MethodInfo>(type, method);
                    }
                }
            }
            Tuple <Type, MethodInfo> result;

            base.Cache.TryGetValue(url, out result);
            return(result);
        }
Beispiel #5
0
 /// <summary>
 /// 获取PageUrlAttribute 属性
 /// </summary>
 /// <param name="methodInfo"></param>
 /// <returns></returns>
 public static ICollection <PageUrlAttribute> GetPageUrlAttributes(MethodInfo methodInfo)
 {
     return(ReflectedAttributeCache.GetAttributes <MethodInfo, PageUrlAttribute>(ReflectedAttributeCache._methodPageUrlAttributeCache, methodInfo));
 }
Beispiel #6
0
 public static ICollection <ActionNameSelectorAttribute> GetActionNameSelectorAttributes(MethodInfo methodInfo)
 {
     return(ReflectedAttributeCache.GetAttributes <MethodInfo, ActionNameSelectorAttribute>(ReflectedAttributeCache._actionNameSelectorAttributeCache, methodInfo));
 }
Beispiel #7
0
 public static ICollection <FilterAttribute> GetMethodFilterAttributes(MethodInfo methodInfo)
 {
     return(ReflectedAttributeCache.GetAttributes <MethodInfo, FilterAttribute>(ReflectedAttributeCache._methodFilterAttributeCache, methodInfo));
 }
Beispiel #8
0
 /// <summary>
 /// 获取筛选特性
 /// </summary>
 /// <param name="type"></param>
 /// <returns></returns>
 public static ICollection <FilterAttribute> GetTypeFilterAttributes(Type type)
 {
     return(ReflectedAttributeCache.GetAttributes <Type, FilterAttribute>(ReflectedAttributeCache._typeFilterAttributeCache, type));
 }
Beispiel #9
0
        /// <summary>
        /// 筛选动作的执行者
        /// </summary>
        /// <param name="controllerContext"></param>
        /// <param name="methodInfos"></param>
        /// <returns></returns>
        private static List <MethodInfo> RunSelectionFilters(ControllerContext controllerContext, List <MethodInfo> methodInfos)
        {
            List <MethodInfo> list  = new List <MethodInfo>();
            List <MethodInfo> list2 = new List <MethodInfo>();

            foreach (MethodInfo methodInfo in methodInfos)
            {
                ICollection <ActionMethodSelectorAttribute> actionMethodSelectorAttributes = ReflectedAttributeCache.GetActionMethodSelectorAttributes(methodInfo);
                if (actionMethodSelectorAttributes.Count == 0)
                {
                    list2.Add(methodInfo);
                }
                else
                {
                    if (actionMethodSelectorAttributes.All((ActionMethodSelectorAttribute attr) => attr.IsValidForRequest(controllerContext, methodInfo)))
                    {
                        list.Add(methodInfo);
                    }
                }
            }
            if (list.Count <= 0)
            {
                return(list2);
            }
            return(list);
        }