.Net Core IResourceFilter简单使用

IResourceFilter用于资源管理的一个过滤器,常用于缓存

废话不多说,直接通过小案列体会它的强大

1.我们需要使用到.Net Core自带的缓存这里我用到了IMemoryCache,一定要注册为单列,要不你每次的缓存都不一致,失去了缓存的意义~

builder.Services.AddSingleton<IMemoryCache, MemoryCache>();

2.创建一个class继承IResourceFilter的class 并实现它的两个方法

using CloudinaryDotNet.Actions;
using Microsoft.AspNetCore.Mvc;
using Microsoft.AspNetCore.Mvc.Filters;
using Microsoft.Extensions.Caching.Memory;
using Newtonsoft.Json;

namespace WebApplication1.Filters
{
    public class CtmResourceFilterAttribute : Attribute, IResourceFilter
    {
        private readonly IMemoryCache _cache;

        public CtmResourceFilterAttribute(IMemoryCache cache)
        {
            _cache = cache ?? throw new ArgumentNullException(nameof(cache));
        }
        public void OnResourceExecuted(ResourceExecutedContext context)
        {
            var path = context.HttpContext.Request.Path.ToString();
            var value = (context.Result as ObjectResult)?.Value;
            _cache.Set(path, value);
        }

        public void OnResourceExecuting(ResourceExecutingContext context)
        {
            var path = context.HttpContext.Request.Path.ToString();
            if (_cache.TryGetValue(path, out object values))
            {
               context.Result = new ObjectResult(values);
            }
        }
    }
}
OnResourceExecuted:当在第一次资源请求时发生调用
我们把,每一个Action存为Key值把获取的值存为value
OnResourceExecuting:在第二次请求,乃至若干次后执行调用 拿到当前请求的Action地址最为Key去缓存中找然会返回即可
下面是测试阶段:
第一次请求会执行该方法进行存储操作

第二次请求时,读取缓存,进行短路操作

 

以上就是IResourceFilter基础用法,该文章作为自己学习笔记,大神勿喷!

三更灯火五更鸡,正是男儿读书时!

posted @ 2022-03-15 15:44  含泪拒绝王阿姨i  阅读(376)  评论(0)    收藏  举报