四:net core(.NET 6)使用Filter過濾器攔截webapi方法


 Filter的基本用法

 

代碼在最下方

使用filter過濾器,來實現攔截接口信息。咱們先新建一個項目,在原有的webapi上面,選擇添加項目,添加一個類庫項目:

 

我起個名字,就叫 Wsk.Core.Filter:

 

 

然后,我們把自帶的控制器刪除掉,咱們手擼一個。以下是要刪掉的部分:

 

 

然后新建一個api控制器,例如叫 WSKController

 

 

 

然后,新建一個webapi方法,例如HelloWorld:

 

 

然后,我們來做個打印輸出到日志,切換回我們的Wsk.Core.Filter上面,刪除默認的Class1,然后新增一個類,就叫HelloFilter,它需要繼承於ActionFilterAttribute   不存在需要先手動引用有關的包:Microsoft.AspNetCore.Mvc

 

 

 

接下來,好戲開始了,直接上代碼:

 

 

重寫4個方法,具體作用,如圖上注釋。我們現在只做簡單驗證,驗證進接口之前、以及執行接口完畢,都會發生什么。我們給他們打印點東西。先在webapi方法里面寫個打印的內容:

 

然后,在OnActionExecuting方法里面寫點接收前的打印內容:

 

在 OnResultExecuted方法寫點webapi方法執行完畢返回時候的打印內容:

 

 

然后,在接口項目里面,引用該類庫項目:

 

 

 在屬性上方添加 [HelloFilter]實現切面攔截:

 

 

 接下來准備duang一下見證奇跡,運行程序,走一個:

 

 

如圖,奇跡見證完畢。

攔截器內部代碼如下:

public class HelloFilter: ActionFilterAttribute
    {

        /// <summary>
        /// Action方法調用之前執行
        /// </summary>
        /// <param name="context"></param>
        public override void OnActionExecuting(ActionExecutingContext context) {
            var descriptor = context.ActionDescriptor as ControllerActionDescriptor;

            string param = string.Empty;
            string globalParam = string.Empty;

            foreach (var arg in context.ActionArguments)
            {
                string value = Newtonsoft.Json.JsonConvert.SerializeObject(arg.Value);
                param += $"{arg.Key} : {value} \r\n";
                globalParam += value;
            }
            Console.WriteLine($"webapi方法名稱:【{descriptor.ActionName}】接收到參數為:{param}");
        }
        /// <summary>
        /// Action 方法調用后,Result 方法調用前執行
        /// </summary>
        /// <param name="context"></param>
        public override void OnActionExecuted(ActionExecutedContext context) { }
        /// <summary>
        /// Result 方法調用前執行
        /// </summary>
        /// <param name="context"></param>
        public override void OnResultExecuting(ResultExecutingContext context) {  }
        /// <summary>
        /// Result 方法調用后執行
        /// </summary>
        /// <param name="context"></param>
        public override void OnResultExecuted(ResultExecutedContext context)  {
            var descriptor = context.ActionDescriptor as ControllerActionDescriptor;
           
            string result = string.Empty;
            if (context.Result is ObjectResult)
            {
                result = Newtonsoft.Json.JsonConvert.SerializeObject(((ObjectResult)context.Result).Value);
            }

            Console.WriteLine($"webapi方法名稱【{descriptor.ActionName}】執行的返回值 :  {result}");
        }
    }

 

最后,見證奇跡了的大大們,歡迎各位大大們打賞、點贊和評論

 版權所有,轉載請注明出處:https://www.cnblogs.com/weskynet/p/14825755.html


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM