web-dev-qa-db-ja.com

FilterAttribute、IActionFilterを実装することと、asp.net mvc 3でActionFilterAttributeから継承することの違いは何ですか?

ある状況では、次のようにOnActionExecutingクラスから継承するOnActionExecutedまたはActionFilterAttributeメソッドをオーバーライドできることがわかります。

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

また、他の状況では、次のようにIActionFilterFilterAttributeを実装することもできます。

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

それで、これらの2つのアプローチの間に違いはありますか、おそらく一方を他方よりも使用することが望ましい特定の状況はありますか?

前もって感謝します。

30

基本的に、FilterAttributeは、MVC属性の最も低レベルの動作を提供し、OrderプロパティとAllowMultipleプロパティを提供するIMvcFilterを実装します。

ActionFilterAttributeは、IActionFilter、IResultFilterの実装であり、FilterAttributeから継承するため、アクションと結果をフィルタリングするための基礎となります。

MySecondFilterAttribute実装は、IResultFilter機能(OnResultExecutingおよびOnResultExecuted)のないActionFilterAttributeにつながります。

22
wnascimento