鉴于这在我的应用程序启动...
app.Use((context, next) =>
{
return next.Invoke();
}).UseStageMarker(PipelineStage.PostAuthenticate);
app.Use((context, next) =>
{
return next.Invoke();
}).UseStageMarker(PipelineStage.Authenticate);
Run Code Online (Sandbox Code Playgroud)
...为什么PostAuthenticate代码在Authenticate代码之前执行?
我并不是说"为什么第一个app.use在第二个app.use之前被调用"我的意思是:为什么第一个调用会在第二个调用之前被调用,因为第二个应该在请求管道中更早发生?
编辑
与此问题相关:如何在此代码中获取Windows标识?
这是设计,根据文档:https://www.asp.net/aspnet/overview/owin-and-katana/owin-middleware-in-the-iis-integrated-pipeline.
在阶段标记规则部分,您可以阅读以下内容:
OWIN管道和IIS管道是有序的,因此
app.UseStageMarker必须按顺序调用.您不能将事件处理程序设置为在使用to注册的最后一个事件之前的事件app.UseStageMarker.例如,在致电之后:Run Code Online (Sandbox Code Playgroud)app.UseStageMarker(PipelineStage.Authorize);调用
app.UseStageMarker传递Authenticate或PostAuthenticate不会被尊重,并且不会抛出任何异常.Owin中间件组件(OMC)在最新阶段运行,默认情况下是PreHandlerExecute.舞台标记用于使它们更早运行.如果您不按顺序指定阶段标记,我们将舍入到较早的标记.换句话说,添加一个舞台标记说"不晚于第十阶段运行".OMC在OWIN管道中添加了最早的阶段标记.
| 归档时间: |
|
| 查看次数: |
2440 次 |
| 最近记录: |