Asynchroner Aktionsfilter: Async & AuthorizeAttribute in der ASP.NET-Web-API

9

Ich habe meine Authentifizierungslogik in einer Klasse, abgeleitet von System.Web.Http.AuthorizeAttribute (überschriebene OnAuthorization-Methode). Ich rufe von dieser Methode einen DB an und ich möchte, dass dieser Aufruf asynchron ist (glücklicherweise ermöglicht die neue ADO.NET-async-API das).

Dann wende ich dieses Attribut an einen Controller an, damit alle Anrufe durch den Authentifizierungsfilter gehen. So weit so gut.

Aber dabei stoße ich auf das folgende Problem. Das Framework (ASP.NET Web API) scheint nicht bewusst zu sein, was meine Absichten sind :) Es sieht so aus, als würde es mit der Action-Ausführung des Controllers fortfahren, bevor die OnAuthorizaion-Methoden meines Filters beendet werden (kehrt vom asynchronen Aufruf zurück) Ausnahme vom Framework a la "Die Anforderungsverarbeitung wurde beendet, bevor alle ausstehenden asynchronen Operationen abgeschlossen sind."

Gibt es einen Out-of-the-Box-Weg, um damit umzugehen?

Danke!

P.S. Mein Bauchgefühl sagt, dass ich für eine benutzerdefinierte Action-Filter-Erstellung bin. Dann muss ich ExecuteActionFilterAsync überschreiben und meine Authentifizierung dort alle Aufgaben-bezogene Sachen selbst ohne Hilfe von der Framework-Seite behandeln ..)

    
ay.metallo 19.10.2012, 17:03
quelle

1 Antwort

5

Ok, hier ist was ich herausgefunden habe (nach einem Blick unter die Haube mit Reflektor):

%Vor%

Auf diese Weise wird die gesamte Logik in einer ordnungsgemäßen Reihenfolge ausgeführt, während der Thread während der E / A nicht blockiert wird. Nicht sehr respektvoll gegenüber Stornierung. Aber sollte für meine Zwecke in Ordnung sein.

Wie auch immer, ich frage mich wirklich, was Web-API-Ersteller dazu gebracht hat, nicht auf ähnliche Weise zu gehen ... Ideen?

    
ay.metallo 19.10.2012 21:48
quelle