如果某個Action過濾器運用了多種過濾器,那么過濾器的執行順序是如何呢?
規則一:不同類型的過濾器有一個先后順序
即執行順序是:授權過濾器->動作過濾器->結果過濾器->異常過濾器。
注意:如果ActionFilter過濾器執行過程中發生了異常,那么會執行ExceptionFilter過濾器,不會執行ResultFilter過濾器。上圖所示的是正常情況下的執行順序。
規則二:控制器上面的過濾器優先於方法上面的過濾器
即控制器和方法上面都使用了相同的過濾器,那么先執行控制器上面的過濾器。如下圖所示:
規則三、Order屬性可以決定過濾器的先后順序
默認order=-1,即會先執行沒有設置order的過濾器。如下圖所示:
規則四、如果過濾器的類型相同,相同order的過濾器不能確定誰先執行
如下圖所示:
規則五、控制器實現的過濾器接口方法優先執行
上圖中實現了ActionFilter過濾器的OnActionExecuting方法,所以先執行這個方法在執行ActionFilter1。如下圖所示: