如何在web api动作过滤器中读取参数属性值

时间:2016-09-15 11:50:38

标签: c# api actionfilterattribute

我有一个API方法,其中Id参数使用CacheType属性注释

echo '$HELLO$' |awk '{sub(/\$/,"\\&");sub(/\$/,"")}1'
&HELLO

我可以在ActionFilterAttribute

中读取参数属性的值
public Object Get([CacheType(CacheTypes.Venue)]int Id)
{
            ....
}

2 个答案:

答案 0 :(得分:3)

要访问当前执行方法的参数集合,请调用

actionContext.ActionDescriptor.GetParameters()

您可以遍历HttpParameterDescriptor的集合并找到所需的参数。您可以通过名称,索引或任何您认为合适的方式来完成。

然后,您可以使用在GetCustomAttributes<TClass>()类型的对象中定义的方法HttpParameterDescriptor来检查参数是否使用类型TClass的属性进行标记。如果您需要该属性的实例来检查该值,只需从生成的属性集合中获取它(如果找到)。

答案 1 :(得分:2)

获取参数值

actionContext.ActionArguments["id"]

使用具有CacheOutput属性

的参数执行某些操作
actionContext.ActionDescriptor.GetParameters().ToList().ForEach(p =>
{
    var cacheOutput = p.GetCustomAttributes<CacheOutputAttribute>();
    if (cacheOutput.Any())
    {
        // do something 
    }
});