ActionFilterAttribute leitet nicht um

8

Ich habe ein Problem mit einem ActionFilterAttriute, das nicht korrekt umgeleitet wird. Ich kenne die komplette Codebase nicht, aber ich habe genug gesehen, um nicht zu verstehen, was vor sich geht.

Um den Code zu vereinfachen, habe ich die irrelevanten Teile entfernt:

%Vor%

Das funktioniert normalerweise, aber wenn die Anwendung in kurzer Zeit von einigen Anfragen betroffen ist, wird die Index-Methode aufgerufen und explodiert, weil der View einige Daten fehlen (wir wissen, dass Daten fehlen) Deshalb wollen wir umleiten).

Aber jetzt, wenn ich die _filterContext.Result = new RedirectResult(ApplicationRedirectResult) als letzte Zeile der Methode OnActionExecuting hinzugefügt habe, wie ist es möglich, dass es immer noch meine Action-Methode aufruft?

Gibt es irgendwelche bekannten Bugs / Corner Cases / irgendetwas anderes, das MVC veranlassen kann, die RedirectResult , die ich in filterContext gesetzt habe, außer Acht zu lassen und trotzdem die Aktionsmethode auszulösen?

Alles was in der Logik von OnActionExecuting enthalten sein kann, kann zu Problemen führen, auch wenn ich filterContext.Result als letzte Zeile gesetzt habe. Alle Ausnahmen innerhalb des Attributs sollten es einfach in die Luft jagen und das Attribut nicht überspringen und die Aktionsmethode aufrufen.

Jede Hilfe, um mich in die richtige Richtung zu lenken, wäre hier willkommen.

    
Øyvind Bråthen 23.08.2013, 12:11
quelle

2 Antworten

0

Ich habe das Problem endlich gefunden. Es war mit der Verwendung der _filterContext -Klassenvariable verbunden.

Das Problem ist, dass MVC nicht eine neue Instanz des Filters für jede Anfrage erstellt, was dazu führt, dass mehrere Anfragen die gleiche Instanz des Attributs teilen.

Weitere Einzelheiten finden Sie in der Liste der Änderungen in den MVC3-Versionshinweisen .

    
Øyvind Bråthen 26.08.2013, 08:30
quelle
0

+1 für Woutters Ergebnis. Angesichts des Codes, den Sie gezeigt haben, sollte es nicht möglich sein, die von Ihnen beschriebenen Ergebnisse zu erzielen. Vielleicht gibt // magic logic here eine Null _filterContext.Result ?

zurück     
robrich 26.08.2013 04:46
quelle