zoukankan      html  css  js  c++  java
  • .net core 批量拦截器(自带Filter,Castle动态代理)

    前言

    本篇介绍.net core批量拦截器的用法,自带Filter和Castle动态代理都有各自适用的场景;

    1、.net core 自带Filter

    1)添加全局Filter,比如错误处理、日志记录等;
    (错误处理Filter)

    (日志记录) 

    (注册全局拦截器)
     

    注册完全局拦截器后,如果某些请求不需要上面拦截器时,可以通过定义一个属性的形式,在拦截器中判断该请求方法上是否带有该属性,从而判断中是否要拦截;拦截逻辑在上图中的LoggerFilter中的IsNoNeedLogger方法来判断;

     

    2)添加局部Filter(非批量添加,但是该方法比常规用法简洁并实用)
    (定义属性,并继承拦截接口)

     (定义类,并继承TypeFilterAttribute) 

     (使用时,以属性的形式并可传参)

     

       

    2、Castle动态代理(结合Autofac使用)
    引入包Autofac.Extras.DynamicProxy,Castle.Core等,定义拦截器;

    定义不需要拦截的地方 (在方法上标注这个属性时,代表不需要拦截,拦截逻辑如上图)

     在Autofac的注册方法中,给某些局部类上批量添加拦截器;

     

     总结:

    1)在适用场景上,自带Filter适合添加全局拦截器,以及某个具体请求方法上已属性的形式添加拦截器,均是在Controller层的;Castle动态代理适合添加局部性的批量拦截器,在接口层(或者说实现层),常规用法不是在Controller层;
    2)当你既有自带Filter添加的全局拦截器以及Castle动态代理的拦截器,当一个请求过来时,在执行顺序上来说,会先在Controller层执行自带Filter的全局拦截器方法,然后在接口层分别执行每个被调到的接口所添加的拦截器方法;
    3)关于TypeFilter和ServiceFilter,当使用ServiceFilter时,需要提前注册该拦截器,而已无法传参,所以本篇采用的是TypeFilter,由于它无法注册,而且可以传参,虽然ServiceFilter可以在注册时决定使用任意的生命周期,比如Scope,来达到不用每次重新实例化,但是TypeFilter也有IsReusable的参数来弥补;
    4)关于Autofac批量注册,可以看上一篇文章  https://www.cnblogs.com/willardzmh/articles/14393696.html

  • 相关阅读:
    XHR——XMLHttpRequest对象
    原生JS弹出层详解,从简单到复杂
    php面向对象(OOP)编程完全教程
    css hack
    Ajax+php 详细分析 (没完整)
    Zend Studio 12 生成 WSDL
    PHP WebService/Soap接口生成方法。
    php soap客户端调试实例及调试
    简单数据结构之栈模拟
    经典算法之约瑟夫问题
  • 原文地址:https://www.cnblogs.com/willardzmh/p/14393701.html
Copyright © 2011-2022 走看看