[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));
}
}
}
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));
}
}
}