Owin舞台标记

时间:2016-05-11 14:09:17

标签: c# owin pipeline

在我的app启动中给出了这个...

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


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

...为什么PostAuthenticate代码在Authenticate代码之前执行?

我不是说“为什么第一个app.use在第二个app.use之前被调用”我的意思是:为什么第一个调用会在第二个调用之前被调用,因为第二个调用应该在请求中更早发生管道

修改

与此问题相关:How am I getting a windows identity in this code?

2 个答案:

答案 0 :(得分:6)

根据文档设计,https://www.asp.net/aspnet/overview/owin-and-katana/owin-middleware-in-the-iis-integrated-pipeline

阶段标记规则部分中,您可以阅读以下内容:

  

OWIN管道和IIS管道是有序的,因此必须按顺序调用app.UseStageMarker。您无法将事件处理程序设置为在注册到app.UseStageMarker的最后一个事件之前的事件。例如,之后调用:

app.UseStageMarker(PipelineStage.Authorize);
     

通过app.UseStageMarkerAuthenticate的{​​{1}}来电不会受到尊重,也不会抛出异常。 Owin中间件组件(OMC)在最新阶段运行,默认情况下为PostAuthenticate。舞台标记用于使它们更早运行。如果您不按顺序指定阶段标记,我们将舍入到较早的标记。换句话说,添加一个阶段标记说“不晚于阶段X运行”。 OMC在OWIN管道中添加了最早的阶段标记。

答案 1 :(得分:0)

似乎与IIS中的文档事件相反,它们按照配置顺序进行连接和处理,而不是按照它们在请求生命周期中出现的顺序进行处理。

这感觉就像是owin请求生命周期中的一个错误但是嘿,我解决了我的问题。