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