2017-05-10 57 views
3

我有兩個全局異常過濾器在啓動秩序ASP.NET全局過濾器的核心

config.Filters.AddService(typeof(ExceptionFilter)); 

config.Filters.AddService(typeof(JsonExceptionFilter)); 

我一直下的印象是,如果同樣的過濾器首先加入它是首先執行。

但是當我第一次加入ExceptionFilter時,它會執行第二次。

更新1

ConfigureServices方法:

services 
    .AddMvc(
     config => 
     { 
      config.Filters.AddService(typeof(ExceptionFilter)); 
      config.Filters.AddService(typeof(JsonExceptionFilter)); 
     }); 
+0

'ExceptionFilter'和'JsonExceptionFilter'看起來像什麼? – Alex

+0

簡單異常處理程序,其中一個處理記錄日誌,並處理ajax錯誤請求 – Marcin

+0

您是否嘗試顛倒註冊它們的順序,以查看它們是否以相反順序執行?也許他們是按LIFO順序執行的。 –

回答

4

在MVC中,你可以指定執行決定爲你的過濾器的順序的順序值。我不知道是否同樣適用於ASP.NET Core,並且在我面前沒有IDE來檢查。你介意試試這個嗎?

config.Filters.AddService(typeof(ExceptionFilter), 2); 
config.Filters.AddService(typeof(JsonExceptionFilter), 1); 

即使那是不是,請檢查是否存在的AddService另一個重載,它接受一個參數指定的順序。

+0

確定還有其他選項。所以這將解決這個問題。不過,我懇求順序不是通過添加順序預先確定 – Marcin

+1

@Marcin關於執行順序的更多信息[這裏](https://docs.microsoft.com/en-us/aspnet/core/mvc/控制器/過濾器),但它講述了更多關於操作過濾器的順序,而不是多個異常過濾器如何協同工作。我的猜測,正如我上面提到的,它們是使用LIFO命令作爲堆棧執行的。 –