2016-05-11 12 views
5

dies in meiner app Inbetriebnahme Bei ...Owin Bühnen Marker

app.Use((context, next) => 
{ 
    return next.Invoke(); 
}).UseStageMarker(PipelineStage.PostAuthenticate); 


app.Use((context, next) => 
{ 
    return next.Invoke(); 
}).UseStageMarker(PipelineStage.Authenticate); 

... warum der PostAuthenticate Code vor dem Code Authentifizieren ausführen?

Ich meine nicht "warum wird die erste app.use vor der zweiten app.use aufgerufen" Ich meine: Warum wird der erste Aufruf vor dem zweiten Aufruf aufgerufen, dass der zweite sollte früher in der passieren Pipeline anfordern?

EDIT

Passend zu diesem Problem: How am I getting a windows identity in this code?

+0

Die Infrastruktur erstellt die Pipeline von Middleware-Komponenten basierend auf der Reihenfolge, in der sie dem IAppBuilder-Objekt in der Configuration-Methode hinzugefügt wurden. – Nkosi

+0

Also die Bühnenmarker dienen keinem Zweck? – War

Antwort

5

Es ist von Entwurf, entsprechend der Dokumentation: https://www.asp.net/aspnet/overview/owin-and-katana/owin-middleware-in-the-iis-integrated-pipeline.

Die OWIN Pipeline und die IIS-Pipeline wird angeordnet, fordert deshalb zu app.UseStageMarker müssen, um:

Im Abschnitt Bühne Marker Regeln, können Sie das folgende lesen. Sie können den Ereignishandler nicht auf ein Ereignis festlegen, das dem letzten bei app.UseStageMarker registrierten Ereignis vorausgeht. Zum Beispiel nach calling:

app.UseStageMarker(PipelineStage.Authorize); 

Anrufe app.UseStageMarker vorbei Authenticate oder PostAuthenticate wird nicht anerkannt, und keine Ausnahme ausgelöst wird. Owin-Middlewarekomponenten (OMCs) werden auf der neuesten Stufe ausgeführt, die standardmäßig PreHandlerExecute ist. Die Bühnenmarkierungen werden verwendet, um sie früher laufen zu lassen. Wenn Sie die Phasenmarkierungen außerhalb der Reihenfolge angeben, runden wir den vorherigen Marker ab. Mit anderen Worten, das Hinzufügen eines Bühnenmarkers sagt "Lauf nicht später als Stufe X". OMCs laufen bei der frühesten Stufe, die nach ihnen in der OWIN-Pipeline hinzugefügt wurde.

+0

Interessant, ich hatte das vorher nicht gesehen. Das erklärt das seltsame Verhalten, das ich gesehen habe. Was für ein komisches Design. – War

+0

'UseStageMarker' ist eine Erweiterung, so dass' Microsoft.Owin.Extensions; 'benötigt wird – Tonatio

0

Es scheint, dass im Gegensatz auch zu den Dokumentations Ereignissen in IIS angeschlossen und in der Reihenfolge verarbeitet, werden sie konfigurieren und nicht in der Reihenfolge sie erscheinen im Anforderungslebenszyklus.

Das fühlt sich für mich wie ein Fehler im Lebenszyklus der Anfrage an, aber hey, ich habe mein Problem gelöst.