.NetCore——自定义过滤器ActionFilterAttribute

.NetCore——自定义过滤器ActionFilterAttribute

一、介绍
在我们做项目开发的时候很多时候需要自己定义过滤器,来进行一些特殊的处理,最常见的就是验证Token什么的,判断你这一次的请求是否合法。还有很多的用法就看项目的实际情况去自定义策略了。下面我介绍一下我做的自定义策略。
二、实现
首先添加一个MyAuthorizeFilter类库,继承ActionFilterAttribute,重写其中的方法。我重写的OnActionExecuting这个方法。
方法介绍

//    在Action执行之后由 MVC 框架调用。
        public virtual void OnActionExecuted(ActionExecutedContext filterContext);
        //     在Action执行之前由 MVC 框架调用。
        public virtual void OnActionExecuting(ActionExecutingContext filterContext);
        //     在执行Result后由 MVC 框架调用。
        public virtual void OnResultExecuted(ResultExecutedContext filterContext);
        //     在执行Result之前由 MVC 框架调用。
        public virtual void OnResultExecuting(ResultExecutingContext filterContext);

现在就在MyAuthorizeFilter类里面添加代码如下

public class MyAuthorizeFilter : ActionFilterAttribute
    {

        /// <summary>
        /// 在方法执行前
        /// </summary>
        /// <param name="filterContext"></param>
        public override void OnActionExecuting(ActionExecutingContext filterContext)
        {

            bool ischeck = false;

            //判断Controller是否跳过验证
            if (filterContext.Controller.GetType().GetCustomAttributes(typeof(SkipActionFilterAttribute), false).Any())
            {
                ischeck = true;
            }
            else
            {
                //判断Action是否跳过验证
                if (filterContext.ActionDescriptor is ControllerActionDescriptor controllerActionDescriptor)
                {
                    if (controllerActionDescriptor.MethodInfo.GetCustomAttributes(inherit: true)
                       .Any(a => a.GetType().Equals(typeof(SkipActionFilterAttribute))))
                    {
                        ischeck = true;
                    }
                }
            }

            if (!ischeck)
            {
                var token = filterContext.HttpContext.Request.Headers["token"].ToString();
                if (string.IsNullOrEmpty(token))
                {
                }
            }
            return;
        }

    }

可以通过代码片段看出是否需要验证,如果需要验证的话,就查找请求头中Token是否存在,如果存在正常执行,如果不存在可以自定义返回内容。
下面就是添加跳过验证的类库SkipActionFilterAttribute如下
在这里插入图片描述

    public class SkipActionFilterAttribute : ActionFilterAttribute
    {
    }

添加好这个类库后,然后在Startup中的ConfigureServices方法中注册使用,否则将不会生效。如下
在这里插入图片描述

当我们做好这些准备工作后,重新编译,运行调试就可以看到所有的请求会先进到MyAuthorizeFilter的OnActionExecuting方法中

当然在一些特定的情况下我们有些接口/控制器不需要进行验证,这个时候SkipActionFilterAttribute类库就可以派上用场了。在方法/控制器的顶部添加[SkipActionFilterAttribute]标识,这个时候就标识这个方法/控制器跳过验证。
如图所示
在这里插入图片描述
这样设置完以后就可以完成基本使用了。

  • 2
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值