.net core 批量攔截器(自帶Filter,Castle動態代理)


前言

本篇介紹.net core批量攔截器的用法,自帶Filter和Castle動態代理都有各自適用的場景;

1、.net core 自帶Filter

1)添加全局Filter,比如錯誤處理、日志記錄等;
(錯誤處理Filter)

(日志記錄) 

(注冊全局攔截器)
 

注冊完全局攔截器后,如果某些請求不需要上面攔截器時,可以通過定義一個屬性的形式,在攔截器中判斷該請求方法上是否帶有該屬性,從而判斷中是否要攔截;攔截邏輯在上圖中的LoggerFilter中的IsNoNeedLogger方法來判斷;

 

2)添加局部Filter(非批量添加,但是該方法比常規用法簡潔並實用)
(定義屬性,並繼承攔截接口)

 (定義類,並繼承TypeFilterAttribute) 

 (使用時,以屬性的形式並可傳參)

 

   

2、Castle動態代理(結合Autofac使用)
引入包Autofac.Extras.DynamicProxy,Castle.Core等,定義攔截器;

定義不需要攔截的地方 (在方法上標注這個屬性時,代表不需要攔截,攔截邏輯如上圖)

 在Autofac的注冊方法中,給某些局部類上批量添加攔截器;

 

 

 總結:

1)在適用場景上,自帶Filter適合添加全局攔截器,以及某個具體請求方法上已屬性的形式添加攔截器,均是在Controller層的;Castle動態代理適合添加局部性的批量攔截器,在接口層(或者說實現層),常規用法不是在Controller層;
2)當你既有自帶Filter添加的全局攔截器以及Castle動態代理的攔截器,當一個請求過來時,在執行順序上來說,會先在Controller層執行自帶Filter的全局攔截器方法,然后在接口層分別執行每個被調到的接口所添加的攔截器方法;
3)關於TypeFilter和ServiceFilter,當使用ServiceFilter時,需要提前注冊該攔截器,而已無法傳參,所以本篇采用的是TypeFilter,由於它無法注冊,而且可以傳參,雖然ServiceFilter可以在注冊時決定使用任意的生命周期,比如Scope,來達到不用每次重新實例化,但是TypeFilter也有IsReusable的參數來彌補;
4)關於Autofac批量注冊,可以看上一篇文章  https://www.cnblogs.com/willardzmh/articles/14393696.html

 


免責聲明!

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



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