Als ich Gestern ein wenig mit Exception Filtern 1 experimentiert habe und ich hierbei zwei Filter für eine Methode gesetzt habe, ist mir aufgefallen, dass die Reihenfolge in der die Filter aktiviert wurden, nicht der entsprach, die ich erwartet habe. Als ich dann zusätzlich auch noch dem Filter Attribut die Order-Eigenschaft mitgegeben habe, war die Reihenfolge dann immer noch nicht wie erwartet.
Konkret sah das einfache Beispiel wie folgt aus.
[ExceptionLoggingFilter1(Order = 1)] [ExceptionLoggingFilter2(Order = 2)] public ActionResult Demo3() { var value = int.Parse("test"); return View("Index"); } |
Erwartet habe ich, dass zunächst ExceptionLoggingFilter1
und dann ExceptionLoggingFilter2
abgearbeitet wird. Allerdings war es genau anders herum. Eine kurze Recherche brachte mich dann zu 2 und der Erkenntnis, dass OnActionExecuted
, OnResultExecuting
und OnException
in umgekehrter Reihenfolge ausgeführt werden.
Will man also, wie ich es ursprünglich vor hatte, erst ExceptionLoggingFilter1
und dann ExceptionLoggingFilter2
abgearbeitet haben, muss der Code wie folgt aussehen.
[ExceptionLoggingFilter1(Order = 2)] [ExceptionLoggingFilter2(Order = 1)] public ActionResult Demo3() { var value = int.Parse("test"); return View("Index"); } |
Einen wirklichen Sinn kann ich darin nicht erkennen, aber in diesem Fall ist die Hauptsache, dass man weiß, dass es so ist und entsprechend berücksichtigen kann.
Kommentare sind geschlossen.