我创建了一个空的asp.net core 项目,在这种情况下MapWhen方法里context的请求参数丢失了,不知道为什么会这样。
例如请求https://localhost:44369/maptest?bc=1,请求参数在MapWhen方法里丢失了
以下是代码,所有的请求只在Startup.Configure中处理
public void Configure(IApplicationBuilder app, IWebHostEnvironment env)
{
app.Use(next =>
{
return async c =>
{
await c.Response.WriteAsync(1 + "\r\n");
await next(c);
};
});
app.Map("/maptest", app1 =>
{
app1.Use(next =>
{
return async c =>
{
await c.Response.WriteAsync("maptest" + "\r\n");
await next.Invoke(c);
};
});
app1.Map("/ph1", app2 =>
{
app2.Use(next =>
{
return async c =>
{
await c.Response.WriteAsync("ph1" + "\r\n");
await next.Invoke(c);
};
});
});
app1.Map("/ph2", app3 =>
{
app3.Use(next =>
{
return async c =>
{
await c.Response.WriteAsync("ph2" + "\r\n");
await next.Invoke(c);
};
});
});
});
Action<IApplicationBuilder> configuration = appr => {
appr.Use(next =>
{
return async c =>
{
await c.Response.WriteAsync("bc" + "\r\n");
await next.Invoke(c);
};
});
};
app.MapWhen(context =>
{
return context.Request.Query.ContainsKey("bc");
}, configuration);
}
请求 https://localhost:44369/maptest?bc=1
时走的是 app.Map("/maptest", ...)
管线,根本没有走 app.MapWhen
app.Map 的作用是分道扬镳
可以改用 UseWhen
调试的时候是走了app.MapWhen的,改成UseWhen也会走。app.map的作用我可以理解,但是它确实在执行了app.map后,又去执行了app.MapWhen。但是我不理解为什么请求参数在MapWhen方法里丢失了,为什么要这么做呢