2014-06-20 6 views
5

Beim Schreiben this answer wurde ich gefragt, ob es Garantien über das Verhalten des ActionFilterAttribute gibt. und ich konnte nicht mit Zuversicht antworten.Werden alle Phasen eines ActionFilterAttribute garantiert aufgerufen?

Insbesondere sind alle vier der Methoden OnActionExecuted, OnActionExecuting, OnResultExecuted & OnResultExecuting garantiert für alle Anforderungen genannt werden, die durch das Attribut übergeben, oder gibt es Umstände (wie Ausnahmen, fiel Verbindung etc), in dem ein oder mehr der Phasen möglicherweise nicht feuern?

Antwort

2

Nein, es wird nicht garantiert, dass sie angerufen werden.

Denken Sie an die Autorisierungsfilter. Wenn die Autorisierung fehlschlägt, würden Sie erwarten, dass Aktionsfilter ausgeführt werden? Das könnte ein großes Sicherheitsloch sein. Ich glaube, eine Ausnahme würde auch die Pipeline von Filtern stoppen und nur Ausnahme-Filter würden von diesem Punkt aus ausgeführt werden.

folgende Filter Gegeben:

public class ExampleFilterAttribute : FilterAttribute, IActionFilter 
{ 
    public void OnActionExecuted(ActionExecutedContext filterContext) 
    { 
     // this code is never reached... 
    } 

    public void OnActionExecuting(ActionExecutingContext filterContext) 
    { 
     throw new NotImplementedException(); 
    } 
} 

auf dem Folgeregler Aktion:

[ExampleFilter] 
public ActionResult Index() 
{ 
    // this code is never reached... 
    return View(); 
} 

weder die Index() Verfahren oder die OnActionExecuted() wird immer erreicht, da OnActionExecuting() eine Ausnahme aufweist.

Verwandte Themen