• ASP.NET Core 6.0 使用 资源过滤器和行为过滤器


    1.AOP 面向切面编程 概念

            AOP(Aspect-Oriented Programming,面向切面编程)是一种编程范式,旨在通过预定义的模式(即“切面”)对程序的横切关注点进行模块化。横切关注点是一个在多个应用模块中出现的概念,例如日志记录、事务管理、安全检查等。AOP允许开发者定义“切面”来跨方法、跨类甚至跨应用来操作这些关注点,从而提供了一种从业务逻辑代码中分离出横切关注点的机制。

            AOP的核心概念包括连接点(Join Point)、切点(Pointcut)、通知(Advice)、切面(Aspect)等。连接点是在程序执行过程中的一些特定点,如方法的调用或特定异常被抛出。切点则定义了在哪些连接点应用通知的规则。通知是切面的实际行为,它描述了当与切点匹配的方法被调用时应执行的操作。切面则是一个封装了通知和切点的模块,它定义了在何处(切点)以及怎样(通知)进行横切。

    AOP的主要优势在于:

    • 降低模块间的耦合度:通过将横切关注点从业务逻辑中分离出来,AOP有助于减少代码之间的依赖关系,使得业务逻辑更加清晰和可维护。
    • 提高代码的可重用性:切面可以在不同的应用或模块中重复使用,从而提高了代码的可重用性。
    • 增强系统的可扩展性:当需要添加新的横切关注点时,只需要定义新的切面和通知即可,而无需修改现有的业务逻辑代码。

    AOP提供了一种灵活且强大的方式来处理程序中的横切关注点,使得开发者能够更加专注于业务逻辑的实现,同时提高了代码的可维护性、可扩展性和可读性。

    比如说异常处理,在每一个 Ation 中用 try ... catch 捕获异常,这样就存在大量的重复代码。

    普通方式解决:
    大量的重复代码
    大量的测试工作
    违背了开闭原则

    面向切面编程AOP
    Aspect Oriented Programming 在不修改之前的代码为基础,可以动态的增加业务逻辑:
    如果可以在已经成型的程序中,如果可以动态在某些行为之前增加点内容;在某些行为之后增加点内容----之前已经开发好的内容保持不变;

    2.ASP.NET Core中的AOP--Filter

    AuthorizeAttribute

    权限验证


    IResourceFilter 扩展

    常见作用:资源缓存,ASP.NET Core6提供的是接口 IResourceFilter。

    例子:

    1. public class CustomResourceFilterAttribute : Attribute, IResourceFilter
    2. {
    3. ///
    4. /// 在资源之前
    5. ///
    6. ///
    7. public void OnResourceExecuting(ResourceExecutingContext context)
    8. {
    9. Console.WriteLine("CustomResourceFilterAttribute.OnResourceExecuting");
    10. }
    11. ///
    12. /// 在资源之后
    13. ///
    14. ///
    15. public void OnResourceExecuted(ResourceExecutedContext context)
    16. {
    17. Console.WriteLine("CustomResourceFilterAttribute.OnResourceExecuted");
    18. }
    19. }
    1. [CustomResourceFilter]
    2. public IActionResult Index()
    3. {
    4. return View();
    5. }

    执行顺序:

    • a.CustomResourceFilterAttribute.0nResourceExecuting
    • b.控制器的构造函数实例化控制器
    • c.执行Action方法
    • d.CustomResourceFilterAttribute.0nResourceExecuted

    IResourceFilter 场景应用

    使用缓存
    1. public class ThirdController : Controller
    2. {
    3. public ThirdController()
    4. {
    5. }
    6. [CustomResourceFilter]
    7. public IActionResult Index()
    8. {
  • 相关阅读:
    元数据性能大比拼:HDFS vs S3 vs JuiceFS
    JAVA大学生学业互助与交流平台计算机毕业设计Mybatis+系统+数据库+调试部署
    多数银行人都会忽略5个影响系统性能的因素总结
    【玩转Rabbitmq系列】01:一文带你敲响Rabbitmq的大门
    Jenkins+Maven+Gitlab+Tomcat 自动化构建打包、部署
    Spring.NET使用Oracle.DataAccess.Client访问数据库
    卷积神经网络的工程技巧总结
    葡萄糖-聚乙二醇-链霉亲和素|Streptavidins-PEG-Glucose|链霉亲和素-PEG-葡萄糖
    winform 自定义 标签
    使用wmic命令获得计算机硬件信息
  • 原文地址:https://blog.csdn.net/nmmking/article/details/138615697