2016-05-11 13 views
5

Biorąc pod uwagę to w moim app starcie ...Owin Stage Markery

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


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

... dlaczego kod PostAuthenticate wykonać przed kodem Authenticate?

Nie mam na myśli "dlaczego pierwszy app.use zostaje wywołany przed drugą aplikacją." Mam na myśli: Dlaczego pierwsze wywołanie jest wywoływane przed sekundą, zważywszy, że drugie powinno mieć miejsce wcześniej w zażądać potoku?

EDIT

związane z tym problemu: How am I getting a windows identity in this code?

+0

Infrastruktura zbuduje potok składników oprogramowania pośredniego na podstawie kolejności, w jakiej zostały dodane do obiektu IAppBuilder w metodzie konfiguracji. – Nkosi

+0

, więc znaczniki etapu nie służą? – War

Odpowiedz

5

Jest to zgodne z dokumentacją: https://www.asp.net/aspnet/overview/owin-and-katana/owin-middleware-in-the-iis-integrated-pipeline.

w sekcji Stage regulaminu Marker, można przeczytać:

Rurociąg OWIN i rurociąg IIS jest zamawiany, dlatego wzywa do app.UseStageMarker musi być w porządku. Nie można ustawić procedury obsługi zdarzenia na zdarzenie poprzedzające ostatnie zarejestrowane zdarzenie na app.UseStageMarker. Na przykład, po powołanie:

app.UseStageMarker(PipelineStage.Authorize); 

wywołania app.UseStageMarker przechodząc Authenticate lub PostAuthenticate nie będą honorowane i nie zostanie wyrzucony wyjątek. Owinne komponenty oprogramowania pośredniego (OMC) działają na ostatnim etapie, domyślnie jest to PreHandlerExecute. Znaczniki scen służą do ich wcześniejszego uruchomienia. Jeśli nie ustawisz znaczników scen, wykonamy zaokrąglenie do wcześniejszego znacznika. Innymi słowy, dodanie znacznika etapu mówi "Uruchom nie później niż etap X". Uruchomienie OMC na najwcześniejszym etapie dodany po nich w rurociągu OWIN.

+0

Ciekawe, nie widziałem tego wcześniej. to wyjaśnia dziwne zachowanie, które widziałem. Co za dziwny projekt. – War

+0

'UseStageMarker' jest rozszerzeniem, więc wymaga' using Microsoft.Owin.Extensions; ' – Tonatio

0

Wydaje się, że nawet w przeciwieństwie do wydarzeń związanych z dokumentacją w IIS są podłączone i przetwarzane w kolejności, w jakiej zostały skonfigurowane, a nie w kolejności, w jakiej powinny pojawiają się w cyklu życia żądania.

To jest jak błąd w moim cyklu życiowym prośby, ale hej, mam problem rozwiązany.