HttpPost特性剖析

      [AttributeUsage(AttributeTargets.Method, AllowMultiple = false, Inherited = true)]
    public abstract class ActionMethodSelectorAttribute : Attribute
    {


    }


    [AttributeUsage(AttributeTargets.Method, AllowMultiple = false, Inherited = true)]
    public sealed class HttpPostAttribute : ActionMethodSelectorAttribute
    {
        //private static readonly AcceptVerbsAttribute _innerAttribute = new AcceptVerbsAttribute(HttpVerbs.Post);


        //public override bool IsValidForRequest(ControllerContext controllerContext, MethodInfo methodInfo)
        //{
        //    return _innerAttribute.IsValidForRequest(controllerContext, methodInfo);
        //}
        public HttpPostAttribute()
        {


        }
    }


    [AttributeUsage(AttributeTargets.Method, AllowMultiple = false, Inherited = true)]
    public sealed class AcceptVerbsAttribute : ActionMethodSelectorAttribute
    {
        public AcceptVerbsAttribute(HttpVerbs verbs)
        {


        }
        public AcceptVerbsAttribute(params string[] verbs)
        {
            if (verbs == null || verbs.Length == 0)
            {
                //throw new ArgumentException(MvcResources.Common_NullOrEmpty, "verbs");
            }


            //Verbs = new ReadOnlyCollection<string>(verbs);
        }
    }




    public class B
    {
        [AcceptVerbs("get","put","post")]
        [HttpPost]
        public int c()
        {
            return 0;
        }
    }




    public enum HttpVerbs
    {
        Get = 1 << 0,
        Post = 1 << 1,
        Put = 1 << 2,
        Delete = 1 << 3,
        Head = 1 << 4,
        Patch = 1 << 5,
        Options = 1 << 6,
    }


    public class ABC
    {
        public int A()
        {
            return 0;
        }
    }
    class Program
    {
        static void Main(string[] args)
        {
            
            MethodInfo[] allMethods =typeof(B).GetMethods(BindingFlags.InvokeMethod | BindingFlags.Instance | BindingFlags.Public);
            foreach (MethodInfo methodinfo in allMethods)
            {
                ReadOnlyCollection<ActionMethodSelectorAttribute> rn=new ReadOnlyCollection<ActionMethodSelectorAttribute>((ActionMethodSelectorAttribute[])methodinfo.GetCustomAttributes(typeof(ActionMethodSelectorAttribute),inherit:true));
            }
        }
    }

猜你喜欢

转载自blog.csdn.net/tangyanzhi1111/article/details/79224889