OWINでプログラムを書いていると、OWINミドルウエアをUseで追加した順番は指定できるんだけど、それがどのリクエストの段階で実行されるか理解できていなかった。
上記の記事を読むと、Stageという考え方があることがわかる。
Stageには
## Pipelineの定義
public enum PipelineStage
{
Authenticate = 0,
PostAuthenticate = 1,
Authorize = 2,
PostAuthorize = 3,
ResolveCache = 4,
PostResolveCache = 5,
MapHandler = 6,
PostMapHandler = 7,
AcquireState = 8,
PostAcquireState = 9,
PreHandlerExecute = 10,
}
のような定義がある。
使い方は
app.UseStageMarker(PipelineStage.Authorize);
のように書く。
public void Configuration(IAppBuilder app)
{
app.Use((context, next) =>
{
PrintCurrentIntegratedPipelineStage(context, "Middleware 1");
return next.Invoke();
});
app.Use((context, next) =>
{
PrintCurrentIntegratedPipelineStage(context, "2nd MW");
return next.Invoke();
});
app.UseStageMarker(PipelineStage.Authenticate);
app.Run(context =>
{
PrintCurrentIntegratedPipelineStage(context, "3rd MW");
return context.Response.WriteAsync("Hello world");
});
app.UseStageMarker(PipelineStage.ResolveCache);
}
こうすることで、1,2の呼び出しはAuthenticateRequestで、3はResolveRequestCacheで呼び出されるようになる。
また一つ理解。