2013-02-14 8 views
23

vedo che in una situazione che possiamo ignorare OnActionExecuting o OnActionExecuted metodi che ereditano da ActionFilterAttribute classe come questa:Qual è la differenza tra l'implementazione di FilterAttribute, IActionFilter e l'ereditazione da ActionFilterAttribute in asp.net mvc 3?

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

E in altra situazione anche possiamo implementare IActionFilter e FilterAttribute come questo:

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

Quindi, ci sono delle differenze tra questi due approcci, forse qualche particolare situazione in cui sarebbe preferibile utilizzare uno di essi rispetto all'altro?

Grazie in anticipo.

risposta

16

Fondamentalmente FilterAttribute fornisce il comportamento di livello più basso degli attributi MVC e implementa IMvcFilter che fornisce le proprietà Order e AllowMultiple.

ActionFilterAttribute è la base per filtrare azioni e risultati, poiché è un'implementazione di IActionFilter, IResultFilter ed eredita da FilterAttribute.

L'implementazione MySecondFilterAttribute conduce ad ActionFilterAttribute senza le capacità di IResultFilter (OnResultExecuting e OnResultExecuted).