首页 > 其他分享 >.net core(.net 6) IResourceFilter 扩展缓存

.net core(.net 6) IResourceFilter 扩展缓存

时间:2023-01-12 15:47:51浏览次数:68  
标签:core 缓存 context API IResourceFilter key net 执行

参考:.net core(.net 6) IResourceFilter 的基础使用(IAsyncResourceFilter) 

缓存:就是一个临时存储区域,以一个Key-value格式保存数据;key---保存数据的标识,也需要这个表示key才能获取缓存。

a 定义一个静态的键值对Dictionary作为临时存储区域

b 在API执行前(OnResourceExecuting)判断该请求是否存在缓存,若存在则直接返回缓存的数据终止action执行

c 在API执行后(OnResourceExecuted)此时说明没有缓存执行了action,就把计算结果存储到缓存内

扩展类:CustomCacheResourceFilterAttribute.cs

using Microsoft.AspNetCore.Mvc;
using Microsoft.AspNetCore.Mvc.Filters;
using System;

namespace Demo02.Utility.Filters
{
    /// <summary>
    /// 自定义ResourceFilter扩展缓存
    /// </summary>
    public class CustomCacheResourceFilterAttribute : Attribute, IResourceFilter
    {
        private static Dictionary<string, Object> CacheDictionary = new Dictionary<string, object>();


        /// <summary>
        /// API执行后 执行
        /// </summary>
        /// <param name="context"></param>
        /// <exception cref="NotImplementedException"></exception>
        public void OnResourceExecuted(ResourceExecutedContext context)
        {
            //执行到这里说明之前没有缓存,并已执行了API,需要将该次数据处理的结果存储到缓存中
            string key = context.HttpContext.Request.Path;
            CacheDictionary[key] = context.Result;

           
        }

        /// <summary>
        /// API执行前 执行
        /// </summary>
        /// <param name="context"></param>
        /// <exception cref="NotImplementedException"></exception>
        public void OnResourceExecuting(ResourceExecutingContext context)
        {
            //将Url作为缓存标识符,相同url同一数据
            string key = context.HttpContext.Request.Path;//Url地址
            if(CacheDictionary.ContainsKey(key))
            {
                object oResult = CacheDictionary[key];
                IActionResult result = oResult as IActionResult;
                context.Result = result;//该变量相当于请求数据处理中的一个断路器,如果给Result值就会终止执行返回Result,如果没有赋值为null,就会继续往后执行。
            }
        }
    }
}

API action测试:

  
        /// <summary>
        /// GET AOP测试 ResourceFilter缓存
        /// </summary>
        /// <returns></returns>
        [HttpGet()]
        [Route("ResourceFilter/CustomCacheResourceFilter/{id:int}")]
        [CustomCacheResourceFilter]
        public IActionResult Get(int id)
        {
            return new JsonResult(new ApiResut<String>()
            {
                Success = true,
                Data = "AOP ResourceFilter 测试",
                Time = DateTime.Now.ToString()

            });
        }

测试结果:

 

标签:core,缓存,context,API,IResourceFilter,key,net,执行
From: https://www.cnblogs.com/yyd-sun/p/17046749.html

相关文章

  • AZ-500 Lab-add the network interface of a virtual machine to an ASG
    由于微软Azure平台界面一直都在变,所以通过考试的关键,是真正理解lab题要表达的意思,不要死记硬背。SIMULATION-Youneedtoaddthenetworkinterfaceofavirtualmachine......
  • .net core(.net 6) IResourceFilter 的基础使用(IAsyncResourceFilter)
    a定义CustomResourceFilterAttribute扩展类,继承父类Attribute,实现IResourceFilter接口b实现接口方法c标记在APIaction上1、CustomResourceFilterAttribute扩展类......
  • 07-GoogLenet 图像分类
    Inception结构的主要思路是用密集成分来近似最优的局部稀疏结构。原始Inception结构如下图所示:  显然从上图中可以看出,原始Inception结构采用1×1、3×3......
  • ResNetv2 论文解读
    前言本文的主要贡献在于通过理论分析和大量实验证明使用恒等映射(identitymapping)作为快捷连接(skipconnection)对于残差块的重要性。同时,将BN/ReLu这些activation操作......
  • .net core(.net 6) webAPI中的AOP支持 ----Filter
    在.netcore中Filter分为以下六大类:1、AuthorizeAttribute(权限验证)2、IResourceFilter(资源缓存)3、IActionFilter(执行方法前后的记录)4、IResultFilter(结果生成前后扩......
  • c# .net开发 wpf框架,开发聊天、网盘、信息发布、视频播放功能
    工作之余,开发了一个小程序,网页端用vue.js框架,桌面端wpf,后台.net,集成identityserver4认证授权。前端wpf .net6框架后端.net6,微服务架构认证授权:identityserver4用......
  • ASP.NET Core 配置 Swagger 显示接口注释描述信息
    添加注释说明给Controller和Action添加注释把注释信息在Swagger中展示这时候需要用到XML文档,因为它是通过XML来维护Swagger文档的一些信息。单击鼠标右键,选择项目......
  • C# .NET MVC 表单提交前校验数据等
     页面上写2个button,一个普通button,另一个是submit,submit的这个隐藏。校验函数写在普通button里,普通buttonclick函数中去提交表单。 页面: <inputtype="button"va......
  • .Net Core Logging模块源码阅读
    .NetCoreLogging模块源码阅读前言在Asp.NetCoreWebapi项目中经常会用到ILogger,于是在空闲的时候就clone了一下官方的源码库下来研究,这里记录一下。官方库地址在:h......
  • 06-DenseNet 图像分类
          DenseNet代码实现(pytorch):1importtorch2importtorch.nnasnn3importtorchvision45print("PyTorchVersion:",torch.__ver......