为什么不捕获 [HttpGet] 和 [HttpPost] 属性
本文关键字:HttpPost 属性 HttpGet 为什么不 | 更新日期: 2023-09-27 17:58:07
>我有一段代码,比如
foreach(var controller in controllers)
{
// ...
var actions = controller.GetMethods()
.Where(method => method.ReturnType == typeof(IHttpActionResult));
foreach(var action in actions)
{
// ...
var httpMethodAttribute = action.GetCustomAttributes(typeof(System.Web.Mvc.ActionMethodSelectorAttribute), true).FirstOrDefault() as System.Web.Mvc.ActionMethodSelectorAttribute;
// ...
}
}
但出于某种原因,即使我可以确认action
有一个is
System.Web.Mvc.ActionMethodSelectorAttribute
的CustomAttribute
,httpMethodAttribute
也总是null
.知道我做错了什么吗?
GetCustomAttributes(..., true)
仅获取您指定的确切类型的属性,搜索要调用GetCustomAttributes
的成员的继承层次结构。 它不会获取从您要搜索的属性类型继承的属性。
要获得HttpGetAttribute
,您需要致电GetCustomAttributes(typeof(HttpGetAttribute), true)
。 HttpPostAttribute
也是如此.
例如,如果您有一个操作方法Foo
重写来自父控制器的方法,并且父控制器的Foo
具有属性,则第二个参数将告知GetCustomAttributes
是否返回父控制器自定义属性。
晚了一年,但如果你想得到HttpMethodAttribute:
var httpMethodAttr = (HttpMethodAttribute)action.GetCustomAttributes()
.SingleOrDefault(a => typeof(HttpMethodAttribute).IsAssignableFrom(a.GetType());
或者如果类型是你所追求的
var httpMethodType = (from a in action.GetCustomAttributes()
let t = a.GetType()
where typeof(HttpMethodAttribute).IsAssignableFrom(t)
select t).SingleOrDefault();
if (httpMethodType = null || httpMethodType == typeof(HttpGetAttribute))