2017-03-03 243 views
22

閱讀了關於asp.net核心middlware之後,我很困惑我應該何時使用過濾器以及何時應該使用中間件,因爲它們似乎可以實現相同的目標。 什麼時候應該使用中間件代替配件?asp.net核心中間件vs過濾器

+1

本文檔針對的是具體問題。 https://docs.microsoft.com/en-us/aspnet/core/mvc/controllers/filters#using-middleware-in-the-filter-pipeline – Nkosi

回答

16

在頻道9有一個關於此的視頻:ASP.NET Monsters #91: Middleware vs. Filters。總結視頻:

請求的執行開始,我們有一箇中間件和另一個middlerware,把它想象成「娃娃裏面的俄羅斯娃娃」,最終路由中間件踢進去然後請求進入MVC管道。因此如果你不需要MVC的上下文(假設你關心流程和執行,比如響應頭部的一些預路由機制等),那麼使用中間件
但是,如果您需要MVC的上下文,並且您想針對操作進行操作,請使用過濾器

18

中間件在ASP.NET Core級別上運行,並且可以處理進入應用程序的每個請求。

另一方面,MVC過濾器僅適用於訪問MVC的請求。

因此,例如,如果我想強制所有請求都必須通過HTTPS完成,那麼我將不得不爲此使用中間件。如果我製作了MVC過濾器,用戶仍然可以請求通過HTTP的靜態文件。

但是另一方面,在MVC控制器中記錄請求持續時間的東西可能絕對是一個動作過濾器。