2016-05-11 7 views
5

私のアプリの起動でこれを考えると...Owinステージマーカー

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


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

...なぜPostAuthenticateコードは、認証コードの前に実行していますか?

「最初のapp.useが2番目のapp.useの前に呼び出されるのはなぜですか」という意味ではありません。つまり、最初の呼び出しは2番目の呼び出しの前に呼び出されますパイプラインをリクエストしますか?

この問題に関連EDIT

How am I getting a windows identity in this code?

+0

インフラストラクチャは、構成メソッドのIAppBuilderオブジェクトに追加された順序に基づいてミドルウェアコンポーネントのパイプラインを構築します。 – Nkosi

+0

ステージマーカーは目的を果たさないでしょうか? – War

答えて

5

これは仕様によるものです。ドキュメント:https://www.asp.net/aspnet/overview/owin-and-katana/owin-middleware-in-the-iis-integrated-pipelineです。セクションステージマーカーのルールで

は、次のように読むことができる:順序でなければなりません

OWINパイプラインとIISパイプラインを発注され、したがって、app.UseStageMarkerに呼び出します。最後に登録されたイベントの前にあるイベントにイベントハンドラを設定することはできません。app.UseStageMarker。例えば、後、呼び出し元:AuthenticateまたはPostAuthenticateを渡すapp.UseStageMarker

app.UseStageMarker(PipelineStage.Authorize); 

呼び出しが表彰されず、例外がスローされません。 Owinミドルウェアコンポーネント(OMC)は、最新の段階で実行され、デフォルトではPreHandlerExecuteです。ステージマーカーは、早期に実行するために使用されます。ステージマーカーの順序が間違っていると指定すると、以前のマーカーに丸められます。言い換えると、ステージマーカーを追加すると、「ステージXまで実行してください」と表示されます。最初の段階でOMCが走ったのは、OWINのパイプラインの後に追加されたことです。

+0

興味深いことに、これまで私はこれを見ていませんでした。それは私が見ている奇妙な行動を説明しています。 奇妙なデザインです。 – War

+0

'UseStageMarker'は拡張であるため、' Microsoft.Owin.Extensionsを使用する '; – Tonatio

0

IISのドキュメントイベントにさえ反して、彼らは、彼らが必要の順序ではなく、設定されているフックアップし、順番に処理されているようですリクエストライフサイクルに表示されます。

これは、私には依頼ライフサイクルのバグのようですが、ちょっと、問題が解決しました。