[Asp.Net Core]Resource扩展定制支持缓存

Posted 厦门德仔

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了[Asp.Net Core]Resource扩展定制支持缓存相关的知识,希望对你有一定的参考价值。

ResourceFilter

就是为了缓存而存在。。。

之前在ActionFilter 需执行controller实列化。ResourceFilter 则不需要。这样可以减少性能损失,提高效率。

CustomResourceFilterAttribute

public class CustomResourceFilterAttribute : Attribute, IResourceFilter
    

        private static Dictionary<string, object> CacheDictionary = new Dictionary<string, object>();
        /// <summary>
        /// 在XX资源之前
        /// </summary>
        /// <param name="context"></param>
        public void OnResourceExecuting(ResourceExecutingContext context)
        
            string key = context.HttpContext.Request.Path;
            if (CacheDictionary.Any(item => item.Key == key))
            
                //断路器,只要是对Result赋值,就不继续往后走了;
                context.Result = CacheDictionary[key] as IActionResult;
            
                Console.WriteLine("CustomResourceFilterAttribute.OnResourceExecuting");
        
        /// <summary>
        /// 在xx资源之后
        /// </summary>
        /// <param name="context"></param>
        public void OnResourceExecuted(ResourceExecutedContext context)
        
            //到了这里,肯定已经完成了计算了;
            string key = context.HttpContext.Request.Path;
            CacheDictionary[key] = context.Result;
            Console.WriteLine("CustomResourceFilterAttribute.OnResourceExecuted");
        
    

Controller

        [CustomResourceFilter]
        public IActionResult IndexResourceTest() 
        
            ViewBag.Date = DateTime.Now;
            return View();
        

测试

1.直接进入OnActionExecuting,跳过controller构造函数

2. 进入controller构造函数

3. 因为是第一次请求,缓存中没有数据。

4.执行Action方法,进行逻辑计算。。。。

5.OnResourceExcecuted方法写入缓存
6.视图

7.第二次刷新页面,缓存存在数据,断路器返回

8.控制器生成时间则返回缓存的数据。

以上是关于[Asp.Net Core]Resource扩展定制支持缓存的主要内容,如果未能解决你的问题,请参考以下文章

使用自定义位置时如何在 asp.net core mvc 中指定视图位置?

先定一个小目标Asp.net Core 在IIS上的托管运行

如何更改 asp.net core 1 中的令牌响应?

ASP.NET Core Identity - 扩展密码哈希

[Asp.Net Core]NET5_Razor扩展01

[Asp.Net Core]NET5_Razor扩展01