国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

資源過濾器—MVC中使用資源過濾器實現(xiàn)不執(zhí)行Action方法體讀取緩存信息返回

這篇具有很好參考價值的文章主要介紹了資源過濾器—MVC中使用資源過濾器實現(xiàn)不執(zhí)行Action方法體讀取緩存信息返回。希望對大家有所幫助。如果存在錯誤或未考慮完全的地方,請大家不吝賜教,您也可以點擊"舉報違法"按鈕提交疑問。

前言

上兩篇文章分享了過濾器實現(xiàn)JWT進行鑒權(quán),分別是通過授權(quán)過濾器和操作過濾器實現(xiàn),這兩個過濾器也是最常用的。文章鏈接:授權(quán)過濾器—MVC中使用授權(quán)過濾器實現(xiàn)JWT權(quán)限認證,操作過濾器—MVC中使用操作過濾器實現(xiàn)JWT權(quán)限認證,接下來將簡單的談談資源過濾器在MVC中如何使用,一般項目中這個過濾器很少用到。

一、什么是資源過濾器?

過濾器(Filter)是 AOP(面向切面編程) 思想的一種實現(xiàn),供我們在執(zhí)行管道的特定階段執(zhí)行代碼,通過使用過濾器可以實現(xiàn)短路請求、緩存請求結(jié)果、日志統(tǒng)一記錄、參數(shù)合法性驗證、異常統(tǒng)一處理、返回值格式化 等等,同時使業(yè)務代碼更加簡潔單純,避免很多重復代碼。所以在我們的過濾器中,大部分過濾器有開始執(zhí)行action,即ing 狀態(tài)的方法,也有action業(yè)務代碼執(zhí)行完后觸發(fā)的ed狀態(tài)的方法。

資源過濾器在過濾器管道中第二個被執(zhí)行,通常用于請求結(jié)果的緩存和短路過濾器管道,通過實現(xiàn)接口 IResourceFilter 或者IAsyncResourceFilter。和其他過濾器一樣,實現(xiàn)接口,只是接口不同,接收的參數(shù)兩類型不同,但是這也正意味著執(zhí)行的時機不同。接收的參數(shù)類型為:ResourceExecutedContext。
資源過濾器—MVC中使用資源過濾器實現(xiàn)不執(zhí)行Action方法體讀取緩存信息返回

二、資源過濾器實現(xiàn)

資源過濾器定義:

資過濾器的定義,需要實現(xiàn)接口 IResourceFilter 或者IAsyncResourceFilter,接收的參數(shù)類型為:ResourceExecutedContext。

   /// <summary>
    /// 資源過濾器
    /// </summary>
    public class MyResourceFilter : Attribute, IResourceFilter//過濾器要繼承Attribute 特性,這樣我們也可以當做特性使用
    {
        /// <summary>
        /// 內(nèi)存緩存對象
        /// </summary>
        private readonly IMemoryCache _memoryCache;
        /// <summary>
        /// 構(gòu)造注入
        /// </summary>
        public MyResourceFilter(IMemoryCache memoryCache)
        {
            _memoryCache = memoryCache;
        }
        /// <summary>
        /// 資源過濾器過濾器執(zhí)行之前(befor)
        /// </summary>
        /// <param name="context"></param>
        public void OnResourceExecuted(ResourceExecutedContext context)
        {
            //針對哪些Action,也可以吧特性標注在Action上
            var ad = context.ActionDescriptor;
            var str = ad.RouteValues["controller"] + "/" + ad.RouteValues["action"];
            if (str != "ResourceFilter/Test")
            {
                return;
            }
            //我們可以將當前的結(jié)果context.Result緩存起來,當執(zhí)行ing時,直接返回,為了方便示例演示,我們用時間表示。
            string content = "Action第一次執(zhí)行調(diào)用時間:" + DateTime.Now;
            var value = _memoryCache.Get("key"); //判斷內(nèi)存中是否有內(nèi)容,有就直接返回,不再執(zhí)行action過程。
            if (value == null)
            {
                _memoryCache.Set("key", content);
            }
        }
        /// <summary>
        /// 資源過濾器過濾器執(zhí)行之后(after)
        /// </summary>
        /// <param name="context"></param>
        public void OnResourceExecuting(ResourceExecutingContext context)
        {
            //針對哪些Action,也可以吧特性標注在Action上
            var ad = context.ActionDescriptor;
            var str = ad.RouteValues["controller"] + "/" + ad.RouteValues["action"];
            if (str != "ResourceFilter/Test")
            {
                return;
            }
            var content = _memoryCache.Get("key"); //判斷內(nèi)存中是否有內(nèi)容,有就直接返回,不再執(zhí)行action過程。
            if (content != null)
            {
               var result = new { IsSuccess = true, Msg= _memoryCache.Get("key") };
                //短路返回,不會再執(zhí)行Action中方法和OnResourceExecuted方法
                context.Result = new ContentResult() { Content = Newtonsoft.Json.JsonConvert.SerializeObject(result) };
            };
            }
        }
 

添加到全局過濾器:

   services.AddMvc(options =>
    {
       options.Filters.Add<MyResourceFilter>();
    });

添加測試Action:

/// <summary>
    /// 資源過濾器測試
    /// </summary>
    public class ResourceFilterController : ControllerBase
    {
        /// <summary>
        /// 內(nèi)存緩存對象
        /// </summary>
        private readonly  IMemoryCache _memoryCache;
        /// <summary>
        /// 構(gòu)造注入
        /// </summary>
        /// <param name="memoryCache"></param>
        public ResourceFilterController(IMemoryCache memoryCache)
        {
            _memoryCache = memoryCache;
        }
         
        /// <summary>
        /// 資源過濾器測試,獲取接口第一次調(diào)用時間
        /// 如果第一次調(diào)用Action:會進入Action執(zhí)行方法體
        /// 如果不是第一次調(diào)用Action:在資源過濾器中直接短路返回第一次調(diào)用時間
        /// </summary>
        /// <returns></returns>
        [HttpGet]
        public ActionResult Test()
        {
            string content = "Action第一次執(zhí)行調(diào)用時間:" + DateTime.Now;
            var value = _memoryCache.Get("key"); //判斷內(nèi)存中是否有內(nèi)容,有就直接返回,不再執(zhí)行action過程。
            if (value == null)
            {
                _memoryCache.Set("key", content);
            }
            return Ok(new { IsSuccess = true, Msg = content });  
        }
    }

三、驗證:

第1次調(diào)用:

訪問地址:

https://localhost:5001/ResourceFilter/Test

資源過濾器—MVC中使用資源過濾器實現(xiàn)不執(zhí)行Action方法體讀取緩存信息返回

第N次調(diào)用:

資源過濾器—MVC中使用資源過濾器實現(xiàn)不執(zhí)行Action方法體讀取緩存信息返回文章來源地址http://www.zghlxwxcb.cn/news/detail-639640.html

到了這里,關(guān)于資源過濾器—MVC中使用資源過濾器實現(xiàn)不執(zhí)行Action方法體讀取緩存信息返回的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來自互聯(lián)網(wǎng)用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權(quán),不承擔相關(guān)法律責任。如若轉(zhuǎn)載,請注明出處: 如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實不符,請點擊違法舉報進行投訴反饋,一經(jīng)查實,立即刪除!

領(lǐng)支付寶紅包贊助服務器費用

相關(guān)文章

  • 【ASP.NET Core】MVC過濾器:常見用法

    【ASP.NET Core】MVC過濾器:常見用法

    前面老周給大伙伴們演示了過濾器的運行流程,大伙只需要知道下面知識點即可: 1、過濾器分為授權(quán)過濾、資源訪問過濾、操作方法(Action)過濾、結(jié)果過濾、異常過濾、終結(jié)點過濾。上一次咱們沒有說異常過濾和終結(jié)點過濾,不過老周后面會說的。對這些過濾器,你有印

    2024年02月05日
    瀏覽(22)
  • 【ASP.NET Core】MVC過濾器:運行流程

    【ASP.NET Core】MVC過濾器:運行流程

    MVC 的過濾器(Filters)也翻譯為“篩選器”。但是老周更喜歡翻譯為“過濾器”,意思上更好理解。 既然都叫過濾器了,就是在MVC的操作方法調(diào)用前后進行特殊處理的類型。比如: a、此調(diào)用是否已授權(quán)? b、在模型綁定之前要不要修改數(shù)據(jù)源?(可能含有兒童不宜的數(shù)據(jù))

    2024年02月05日
    瀏覽(21)
  • gateway-過濾器執(zhí)行順序

    請求進入網(wǎng)關(guān)會碰到三類過濾器:當前路由過濾器、DefaultFilter、GlobalFilter。 請求路由后,會將當前路由過濾器和DefaultFilter、GlobalFilter,合并到一個過濾器鏈(集合)中,排序后依次執(zhí)行每個過濾器 過濾器執(zhí)行順序 1.每一個過濾器都必須指定一個int類型的order值,order值越小

    2024年02月13日
    瀏覽(19)
  • Spring MVC獲取參數(shù)和自定義參數(shù)類型轉(zhuǎn)換器及編碼過濾器

    Spring MVC獲取參數(shù)和自定義參數(shù)類型轉(zhuǎn)換器及編碼過濾器

    目錄 ? 一、使用Servlet原生對象獲取參數(shù) 1.1?控制器方法 1.2?測試結(jié)果 二、自定義參數(shù)類型轉(zhuǎn)換器 2.1?編寫類型轉(zhuǎn)換器類 2.2?注冊類型轉(zhuǎn)換器對象? 2.3?測試結(jié)果? 三、編碼過濾器 3.1?JSP表單 3.2?控制器方法 3.3?配置過濾器 3.4 測試結(jié)果? 往期專欄文章相關(guān)導讀? 1. Maven系列專

    2024年02月10日
    瀏覽(31)
  • springbboot攔截器,過濾器,監(jiān)聽器及執(zhí)行流程

    springbboot攔截器,過濾器,監(jiān)聽器及執(zhí)行流程

    過濾器是在請求進入容器后,但請求進入servlet之前進行預處理的。請求結(jié)束返回也是,是在servlet處理完后,返回給前端之前 請求按照上圖進入conteoller后執(zhí)行完再返回 過濾器是Servlet規(guī)范中定義的一種組件,可以用于在請求進入Web應用程序之前或響應離開Web應用程序之前對請

    2024年02月13日
    瀏覽(20)
  • 使用維納過濾器消除駕駛艙噪音(Matlab代碼實現(xiàn))

    使用維納過濾器消除駕駛艙噪音(Matlab代碼實現(xiàn))

    ????????? 歡迎來到本博客 ???????? ??博主優(yōu)勢: ?????? 博客內(nèi)容盡量做到思維縝密,邏輯清晰,為了方便讀者。 ?? 座右銘: 行百里者,半于九十。 ?????? 本文目錄如下: ?????? 目錄 ??1 概述 ??2 運行結(jié)果 ??3?參考文獻 ??4 Matlab代碼實現(xiàn) 駕駛艙

    2024年02月13日
    瀏覽(22)
  • 75.SpringMVC的攔截器和過濾器有什么區(qū)別?執(zhí)行順序?

    75.SpringMVC的攔截器和過濾器有什么區(qū)別?執(zhí)行順序?

    攔截器不依賴與servlet容器,過濾器依賴與servlet容器。 攔截器只能對action請求(DispatcherServlet 映射的請求)起作用,而過濾器則可以對幾乎所有的請求起作用。 攔截器可以訪問容器中的Bean(DI),而過濾器不能訪問(基于spring注冊的過濾器也可以訪問容器中的bean)。 過濾器 和 攔

    2024年02月22日
    瀏覽(26)
  • 【看好了】如何使用fiddler實現(xiàn)手機抓包,F(xiàn)ilters過濾器!

    【看好了】如何使用fiddler實現(xiàn)手機抓包,F(xiàn)ilters過濾器!

    目錄 一、Fiddler與其他抓包工具的區(qū)別 二、Fiddler的工作原理 三、使用fiddler實現(xiàn)手機抓包 四、Filters過濾器 1、Firebug雖然可以抓包,但是對于分析http請求的詳細信息,不夠強大。模擬http請求的功能也不夠,且firebug常常是需要“無刷新修改”,如果刷新了頁面,所有的修改都

    2024年02月09日
    瀏覽(27)
  • 在Spring boot中 使用JWT和過濾器實現(xiàn)登錄認證

    在Spring boot中 使用JWT和過濾器實現(xiàn)登錄認證

    在navicat中運行如下sql,準備一張user表 導入pom.xml坐標 在工utils包下創(chuàng)建一個用于生成和解析JWT 令牌的工具類 在pojo包下創(chuàng)建user類 在mapper包下添加 UserMapper接口 在service包下添加 UserService類 在utils包下添加統(tǒng)一響應結(jié)果封裝類 在controller包下添加LoginController類 這樣登錄獲取toke

    2024年02月06日
    瀏覽(18)
  • spring boot過濾器實現(xiàn)項目內(nèi)接口過濾

    spring boot過濾器實現(xiàn)項目內(nèi)接口過濾

    由于業(yè)務需求,存在兩套項目,一套是路由中心,一套是業(yè)務系統(tǒng). 現(xiàn)在存在問題是,路由中心集成了微信公眾號與小程序模塊功能,業(yè)務系統(tǒng)部署了多套服務. 現(xiàn)在需要通過調(diào)用路由中心將接口重新路由到指定的業(yè)務系統(tǒng)中 將小程序,公眾號用戶信息與業(yè)務系統(tǒng)做綁定 將路由中心的

    2023年04月20日
    瀏覽(24)

覺得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請作者喝杯咖啡吧~博客贊助

支付寶掃一掃領(lǐng)取紅包,優(yōu)惠每天領(lǐng)

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包