2013-10-08 25 views

回答

9

根據問題,是的,我們可以在IActionFilterIAuthorizationFilter中執行相同的邏輯。但唯一的執行順序不同。

ASP.NET MVC框架支持四種不同類型的過濾器:

Authorization – Implements IAuthorizationFilter Attribute. 
    Action  – Implements IActionFilter Attribute. 
    Result  – Implements IResultFilter Attribute. 
    Exception  – Implements IExceptionFilter Attribute. 

注:濾膜在上面列出的順序執行。行動過濾和異常過濾器所有其他類型的filter後總是執行前

授權過濾器總是被執行。

Authorization過濾器用於實現控制器操作的authenticationauthorization。例如,授權過濾器就是授權過濾器的一個例子。

動作過濾器包含在執行控制器動作之前和之後執行的邏輯。例如,您可以使用操作過濾器來修改控制器操作返回的視圖數據。

Result過濾器包含在執行視圖結果之前和之後執行的邏輯。例如,您可能想要在將視圖呈現給瀏覽器之前修改視圖結果。

Exception過濾器是要運行的最後一種過濾器。您可以使用異常過濾器來處理由控制器操作或控制器操作結果引發的錯誤。您也可以使用異常過濾器來記錄錯誤。

每種不同類型的過濾器都以特定的順序執行。如果要控制執行相同類型的過濾器的順序,則可以設置過濾器的Order屬性。

注意:所有操作篩選器的基類是System.Web.Mvc.FilterAttribute類。

1

是的,你可以使用動作過濾器來實現一個認證過濾器。從here

您可以使用操作篩選器進行日誌記錄,身份驗證,輸出緩存或其他任務。

我怕我不知道爲什麼存在其他差異比IAuthorizationFilter是一個簡單的界面與它的一種方法,它也有較少的性能上它的語境。

3

授權過濾器在操作管道的早期運行。例如,如果條件不符合,它們可以逃離行動管道。 (使用它的示例MVC框架屬性是[Authorize],[RequireHttps])

動作過濾器在授權過濾器之後執行,並且它可以參與動作的預處理和後處理。