在asp.net core 1.1中,我有一个全局的拦截器,但是我所有的action中 有几个不需要这个拦截器拦截,我以前在asp.net mvc4中的做法是 再定义一个attribute 加在那几个action上边,在 全局的拦截器里判断 代码如下
public partial class CustActionFilterAttribute : ActionFilterAttribute { public override void OnActionExecuting(ActionExecutingContext filterContext) { Object[] actionFilter = filterContext.ActionDescriptor.GetCustomAttributes( typeof(NoActionFilterAttribute), false); //有 NoAuthentication 则 不验证 if (actionFilter.Length > 0) { base.OnActionExecuting(filterContext); return; } } }
但是现在 在asp.net core1.1 中 context.ActionDescriptor没有
GetCustomAttributes这个方法了,求大大们指点一下,应该怎么做!
你不应该这样做的,
你可以在这个拦截器上定义一个属性啊
比如是否拦截
public bool IsFiltger{get;set;}
OnActionExecuting代码中判断IsFiltger,如果IsFiltger是true的话就做,如果不是的话你就不需要做任何处理。、
然后在action上加上特性CustActionFilter(IsFilter=false)。
或者在构造函数中传入是否拦截也一样。
现在一个比较困扰我的问题是 在asp.net core 的OnActionExecuting 我不知道怎么才能去到 自定义的 特性。
@srymbud:
如果是你说的需求。用我刚才说的就可以了。
如果你非要在这里获取自定义特性,如果官方没有提供,你就用反射自己获取好来。
因为在这里你应该可以获取到Controller和action就是类名和方法名,肯定也可以获取到类上或者方法上的特性了。
这是asp.net core 2.1代码,1.1也是一样的
public override void OnActionExecuting(ActionExecutingContext context)
{
AuthoritybtnAttribute authoritybtnAttribute =(AuthoritybtnAttribute)((Microsoft.AspNetCore.Mvc.Controllers.ControllerActionDescriptor)context.ActionDescriptor).MethodInfo.GetCustomAttribute(typeof(AuthoritybtnAttribute), false);
}
赞,学到了。
现在没有GetCustomAttribute,只有GetCustomAttributes
AuthoritybtnAttribute authoritybtnAttribute =(AuthoritybtnAttribute)((Microsoft.AspNetCore.Mvc.Controllers.ControllerActionDescriptor)context.ActionDescriptor).MethodInfo.GetCustomAttributes(typeof(AuthoritybtnAttribute), false)[0];