2013-02-14 9 views
23

Ich sehe, dass eine Situation, in der wir OnActionExecuting oder OnActionExecuted Methoden erben von ActionFilterAttribute Klasse wie folgt außer Kraft setzen können:Was ist der Unterschied zwischen der Implementierung von FilterAttribute, IActionFilter und dem Erben von ActionFilterAttribute in asp.net mvc 3?

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

Und wir auch in anderen Situation kann IActionFilter und FilterAttribute wie folgt implementieren:

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

Also, gibt es irgendwelche Unterschiede zwischen diesen beiden Ansätzen, vielleicht irgendwelche besonderen Situationen, in denen es vorzuziehen wäre, einen von ihnen gegenüber dem anderen zu verwenden?

Vielen Dank im Voraus.

Antwort

16

Grundsätzlich bietet FilterAttribute das niedrigste Verhalten von MVC-Attributen und implementiert den IMvcFilter, der die Eigenschaften Order und AllowMultiple bereitstellt.

ActionFilterAttribute ist die Grundlage für das Filtern von Aktionen und Ergebnissen, da es sich um eine Implementierung von IActionFilter, IResultFilter und von FilterAttribute erben handelt.

Ihre MySecondFilterAttribute-Implementierung führt zu ActionFilterAttribute ohne IResultFilter-Funktionen (OnResultExecuting und OnResultExecuted).