Asp.net

在asp.net mvc 3中實現FilterAttribute,IActionFilter和從ActionFilterAttribute繼承有什麼區別?

  • February 14, 2013

我看到在一種情況下,我們可以像這樣覆蓋OnActionExecutingOnActionExecuted繼承自ActionFilterAttribute類的方法:

public class MyFilterAttribute : ActionFilterAttribute
{
   public override void OnActionExecuted(ActionExecutedContext filterContext)
   { // bla bla }
}

IActionFilter在其他情況下,我們也可以FilterAttribute像這樣實現:

public class MySecondFilterAttribute : FilterAttribute, IActionFilter 
{ 
   public void OnActionExecuted(ActionExecutingContext filterContext) {}
}

那麼,這兩種方法之間是否有任何區別,也許在任何特定情況下,最好使用其中一種而不是另一種?

提前致謝。

基本上,FilterAttribute 提供了 MVC 屬性的最低級別的行為,並實現了提供 Order 和 AllowMultiple 屬性的 IMvcFilter。

ActionFilterAttribute 是過濾動作和結果的基礎,因為它是 IActionFilter、IResultFilter 的實現,並繼承自 FilterAttribute。

您的 MySecondFilterAttribute 實現導致 ActionFilterAttribute 沒有 IResultFilter 功能(OnResultExecuting 和 OnResultExecuted)。

引用自:https://stackoverflow.com/questions/14879340