ある状況では、次のようにOnActionExecuting
クラスから継承するOnActionExecuted
または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) {}
}
それで、これらの2つのアプローチの間に違いはありますか、おそらく一方を他方よりも使用することが望ましい特定の状況はありますか?
前もって感謝します。
基本的に、FilterAttributeは、MVC属性の最も低レベルの動作を提供し、OrderプロパティとAllowMultipleプロパティを提供するIMvcFilterを実装します。
ActionFilterAttributeは、IActionFilter、IResultFilterの実装であり、FilterAttributeから継承するため、アクションと結果をフィルタリングするための基礎となります。
MySecondFilterAttribute実装は、IResultFilter機能(OnResultExecutingおよびOnResultExecuted)のないActionFilterAttributeにつながります。