返回顶部
首页 > 资讯 > 后端开发 > ASP.NET >.Net Core Aop之IResourceFilter的具体使用
  • 159
分享到

.Net Core Aop之IResourceFilter的具体使用

2024-04-02 19:04:59 159人浏览 薄情痞子
摘要

目录一、简介二、IResourceFilter(同步资源缓存)1、定义Filter三、IAsyncResourceFilter(异步资源缓存)四、总结一、简介 在.net core

一、简介

.net core 中Filter分为以下六大类:

  • 1、AuthorizeAttribute(权限验证)
  • 2、IResourceFilter(资源缓存)
  • 3、IActionFilter(执行方法前后的记录)
  • 4、IResultFilter(结果生成前后扩展)
  • 5、IAlwaysRun(响应结果的补充)
  • 6、IExceptionFilter(异常处理)

二、IResourceFilter(同步资源缓存)

1、定义Filter

public class CustomerResourceFilterAttribute : Attribute, IResourceFilter
    {
        private static Dictionary<string,object> cacheDic=new Dictionary<string, object>();
        public void OnResourceExecuting(ResourceExecutinGContext context)
        {
            var path=context.HttpContext.Request.Path; 
            if (cacheDic.ContainsKey(path))
            {
                context.Result = (IActionResult)cacheDic[path];
            }
            Console.WriteLine("CustomerResourceFilterAttribute.OnResourceExecuting");
        }
        public void OnResourceExecuted(ResourceExecutedContext context)
        {
            var path = context.HttpContext.Request.Path;
            cacheDic[path] = context.Result;
            Console.WriteLine("CustomerResourceFilterAttribute.OnResourceExecuted");
        }

        
    }

2、使用Filter

public class HomeController : Controller
    {
        private readonly ILogger<HomeController> _logger;

        public HomeController(ILogger<HomeController> logger)
        {
            _logger = logger;
            Console.WriteLine($"执行 {this.GetType().Name} 构造函数");
        }

        [CustomerResourceFilter]
        public IActionResult Index()
        {
            ViewBag.Data = DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss");
            return View();
        }
    }

3、前端页面代码

@{
    ViewData["Title"] = "Home Page";
}


<h3>来自于控制器的结果:@ViewBag.Data</h3>
<h3>来自于页面的结果:@DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss")</h3>

4、页面效果

按F5可以看到页面值的变化效果,"来自于控制器的结果"的值会一直不变,“来自于页面的结果”随着页面刷新,值会一直变化

三、IAsyncResourceFilter(异步资源缓存)

public class CustomerAsyncResourceFilterAttribute : Attribute, IAsyncResourceFilter
    {
        private static Dictionary<string, object> cacheDic = new Dictionary<string, object>();
        public async Task OnResourceExecutionAsync(ResourceExecutingContext context, ResourceExecutionDelegate next)
        {
            Console.WriteLine("CustomerResourceFilterAttribute.OnResourceExecutionAsync Before");

            var path = context.HttpContext.Request.Path;
            if (cacheDic.ContainsKey(path))
            {
                context.Result = (IActionResult)cacheDic[path];
            }
            else
            {
                ResourceExecutedContext resource =await next.Invoke();
                cacheDic[path] = resource.Result; // 这句话的执行就是去执行控制器的构造函数+Action
                Console.WriteLine("CustomerResourceFilterAttribute.OnResourceExecutionAsync After");
            }
            

        }
    }

四、总结

不管是同步还是异步,他们的执行顺序其实都是一样的,下面是同步和异步分别打印的日志记录:

1、同步日志

2、异步日志

 到此这篇关于.Net Core aop之IResourceFilter的具体使用的文章就介绍到这了,更多相关.net Core Aop IResourceFilter内容请搜索编程网以前的文章或继续浏览下面的相关文章希望大家以后多多支持编程网!

--结束END--

本文标题: .Net Core Aop之IResourceFilter的具体使用

本文链接: https://lsjlt.com/news/139835.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

猜你喜欢
  • .Net Core Aop之IResourceFilter的具体使用
    目录一、简介二、IResourceFilter(同步资源缓存)1、定义Filter三、IAsyncResourceFilter(异步资源缓存)四、总结一、简介 在.net core ...
    99+
    2024-04-02
  • .Net Core AOP之AuthorizeAttribute的作用是什么
    AuthorizeAttribute在.Net Core中的作用是用于对控制器或者控制器中的方法进行权限验证。当使用该属性时,只有具...
    99+
    2023-09-26
    .Net
  • .Net Core 之AutoFac的使用
    目录Autofac介绍组件的三种注册方式生命周期AutoFac 在asp .net core中的使用本文不介绍IoC和DI的概念,如果你对Ioc之前没有了解的话,建议先去搜索一下相关...
    99+
    2024-04-02
  • .Net Core 中选项Options的具体实现
    目录由代码开始定义一个用户配置选项定义json配置文件:myconfig.json创建ServiceCollection示例代码代码运行结果通过运行代码得到的结论问题配合源码解决疑惑...
    99+
    2024-04-02
  • .Net Core 进程守护之Supervisor使用详解
    目录介绍supervisor1、执行下列命令安装supervisor2、安装完成之后,我们到配置目录去添加两个配置文件 3、启动Supervisor4、Supervisor...
    99+
    2024-04-02
  • python3之Splash的具体使用
    目录1、Scrapy-Splash的安装2、Splash Lua脚本3、Splash对象的属性与方法4、响应对象5、元素对象6、Splash HTTP API调用7、实例Splash...
    99+
    2024-04-02
  • nginx之queue的具体使用
    目录一、简介二、数据结构三、相关API3.1 初始化一个队列3.2 判断队列是否为空3.3 队头插入节点3.4 队尾插入节点3.5 从队列中移除某个节点3.6 将队列从某个节点拆分成...
    99+
    2024-04-02
  • .NET Core中使用gRPC的方法
    目录1.什么是gRPC1.基本介绍2.proto文件3.上手实践2.gRPC流1.服务端流、客户端流、双向流2.NetCore Web项目作为客户端3.gRPC AOP拦截1.什么是...
    99+
    2024-04-02
  • .Net Core下使用Dapper的方法
    目录一、前言二、Dapper环境搭建三、Dapper封装定义DapperDBContext类异步分页构建(PageAsync)定义工作单元与事务定义数据仓储数据库连接四、Dapper...
    99+
    2024-04-02
  • .net core异常中间件的使用
    目录正文结正文 if (env.IsDevelopment()) { app.UseDeveloperExceptionPage(); } 这样写入中间件哈,那么在env环境...
    99+
    2024-04-02
  • .net core静态中间件的使用
    目录正文结正文 我们使用静态文件调用: app.UseStaticFiles(); 那么这个默认会将我们根目录下的wwwroot作为静态目录。 这个就比较值得注意的,可能刚开...
    99+
    2024-04-02
  • shell命令之mv的具体使用
    目录文件间的移动文件到目录的移动目录到目录的移动思考操作系统为 macOS 10.12.4 shell 的 mv 命令为移动(moving)的意思,实际可分为文件间的移动,文件到目录的移动,目录到目录的移动。 mv参数设...
    99+
    2022-06-05
    shell命令mv
  • pytest之assert断言的具体使用
    背景 本文总结使用pytest编写自动化测试时常用的assert断言。 说明 本文将从以下几点做总结: 为测试结果作断言 为断言不通过的结果添加说明信息 ...
    99+
    2024-04-02
  • C++17之std::any的具体使用
    目录1. 使用std::any 2. std::any类型和操作2.1 std::any的类型2.2 std::any操作    一般来说,c++是一种...
    99+
    2024-04-02
  • C++17之std::visit的具体使用
    目录1. 使用对象函数方式访问 2. 使用泛型Lambdas访问3. 使用重载的Lambdas来访问    它们必须明确地为每种可能的类型提供函数调用操...
    99+
    2024-04-02
  • pandas学习之df.set_index的具体使用
    目录构建实例key:label array-like or list of label/arraysdrop:bool,default Trueappend:bool default...
    99+
    2024-04-02
  • pandas学习之df.fillna的具体使用
    目录构建实例:value:scalar,series,dict,dataframemethod:{backfill,bfill,pad,ffill,none},default non...
    99+
    2024-04-02
  • GoLang之gobuild命令的具体使用
    目录1.go build命令2.手动案例2.1新建文件2.2配置2.3go mod init2.4go get -u github.com/jinzhu/configor2.5go ...
    99+
    2024-04-02
  • Redis之sql缓存的具体使用
    目录1.环境搭建2.Redis配置3.功能实现4.缓存注解的使用说明1.环境搭建 <!-- RedisTemplate --> <dependency>...
    99+
    2024-04-02
  • .Net Core微服务之EventBus的作用是什么
    在.NET Core微服务架构中,EventBus(事件总线)的作用是实现微服务之间的解耦和消息传递。它允许微服务之间通过发送和订阅...
    99+
    2023-09-21
    .Net EventBus 微服务
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作