2013-02-14 11 views
23

widzę, że w jednej sytuacji możemy zastąpić OnActionExecuting lub OnActionExecuted metody dziedziczenie z ActionFilterAttribute klasy tak:Jaka jest różnica między implementacją FilterAttribute, IActionFilter i dziedziczeniem z ActionFilterAttribute w asp.net mvc 3?

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

aw innej sytuacji możemy również realizować IActionFilter i FilterAttribute takiego:

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

Czy są jakieś różnice między tymi dwoma podejściami, być może w jakiejś konkretnej sytuacji, w której lepiej byłoby użyć jednego z nich nad drugim?

Z góry dziękuję.

Odpowiedz

16

Zasadniczo funkcja FilterAttribute zapewnia najniższe zachowanie atrybutów MVC i implementuje filtr IMvcFilter, który zapewnia właściwości Order i AllowMultiple.

ActionFilterAttribute to podstawa filtrowania akcji i wyników, ponieważ jest to implementacja IActionFilter, IResultFilter i dziedziczenie z FilterAttribute.

Twoja implementacja MySecondFilterAttribute prowadzi do ActionFilterAttribute bez funkcji IResultFilter (OnResultExecuting i OnResultExecuted).