隐藏

.net core如何做全局拦截器

发布:2021/7/15 17:35:05作者:管理员 来源:本站 浏览次数:1395

这里我们来写一段代码拦截全局请求里的token,并将token解析成一个用户信息回传到每个方法


   public class FilterController: ActionFilterAttribute

   {

           public override void OnActionExecuting(ActionExecutingContext context)

           {

               //拦截全局里是否带了token

               if (string.IsNullOrEmpty(context.HttpContext.Request.Query["token"]))

               {

                   context.Result = new JsonResult(

                       //该类是KeeSoft框架里自带的一个返回结果集

                       new KeeSoft.Core.ResponseMessage()

                       {

                           Status = KeeSoft.Core.ResponseStatus.ERROR.ToString(),

                           Text = "token缺失"

                       }

                   );

               }

   

               //假设有这么类可以将token解析成用户基本信息

               KeeSoft.Mini.Utils.User user =

                   new KeeSoft.Mini.Utils.User(context.HttpContext.Request.Query["token"]);

   

               //接着我们将这个user实例注册到控制器的方法里,之后你在控制器里命名带有user的参数,

               //将自动转成 KeeSoft.Mini.Utils.User类型的实例

               context.ActionArguments["user"] = user;

           }

   }


有个拦截类,下一步就是将该类注入的全局应用中


   public void ConfigureServices(IServiceCollection services)

   {

      //在这里你已经拦截器FilterController注入到全局请求中

      services.AddMvc(options=> {

          options.Filters.Add<FilterController>();

      });

   }


可以用上面两端代码做个demo