剑轩

net core 过滤器。net core 过滤器获取特性。过滤器获取控制器名称,获取action名称

电脑版发表于:2019/5/22 16:31


注册过滤器的位置和net framework有点区别,但是也差不多。

3.x版本中

services.AddControllersWithViews(a =>
{
  //配置一个ServiceFilter
  a.Filters.AddService<CheckTokenFilter>();
}).AddRazorRuntimeCompilation();


在过滤器中获取action与controller的名称

转成ControllerActionDescriptor就可以了

    public void OnActionExecuting(ActionExecutingContext context)
    {

        if (context.ActionDescriptor is ControllerActionDescriptor controllerActionDescriptor)
        {
            string actionName = controllerActionDescriptor.ActionName;
            string controllerName = controllerActionDescriptor.ControllerName;

            if (controllerName.ToLower() == "User".ToLower() && actionName.ToLower() == "ArticleDetials".ToLower())
            {

            }
        }
    }


下面说一下在过滤器中常用的几个小知识

获取控制器,action的特性

获取当前所有的过滤器

跳转页面

    public override void OnActionExecuting(ActionExecutingContext filterContext)
    {

        var noNeedCheck = false;
        if (filterContext.ActionDescriptor is ControllerActionDescriptor controllerActionDescriptor)
        {
            //noNeedCheck = controllerActionDescriptor.MethodInfo.GetCustomAttributes(inherit: true)
            //  .Any(a => a.GetType().Equals(typeof(NoSignAttribute)));

            //获取请求controller的特性
            object[] noSignAttribute = controllerActionDescriptor.ControllerTypeInfo.GetCustomAttributes(typeof(NoSignAttribute), false);
            noNeedCheck = noSignAttribute.Any(a => a.GetType().Equals(typeof(NoSignAttribute)));

        }
        if (noNeedCheck) return;

        //获取当前所有的过滤器
        var filter = filterContext.Filters;

        //跳转页面
        filterContext.Result = new RedirectResult("/login/index");
    }

上面有获取控制器上面的NoSignAttribute,是自定义的。可以使用验证一些东西。比如有这个特性就不进行过滤器的逻辑验证了

public class NoSignAttribute : Attribute
{

}


关于TNBLOG
TNBLOG,技术分享。技术交流:群号677373950
ICP备案 :渝ICP备18016597号-1
App store Android
精彩评论
{{item.replyName}}
{{item.content}}
{{item.time}}
{{subpj.replyName}}
@{{subpj.beReplyName}}{{subpj.content}}
{{subpj.time}}
猜你喜欢