首页 新闻 搜索 专区 学院

asp.net core 3.1 请求管道参数丢失,很奇怪,不知道为什么会这样

0
悬赏园豆:10 [待解决问题]

我创建了一个空的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);
        
    }
微若思丢丢的主页 微若思丢丢 | 初学一级 | 园豆:156
提问于:2022-09-22 21:26
< >
分享
所有回答(1)
0

请求 https://localhost:44369/maptest?bc=1 时走的是 app.Map("/maptest", ...) 管线,根本没有走 app.MapWhen

app.Map 的作用是分道扬镳

dudu | 园豆:36310 (高人七级) | 2022-09-22 21:56

详见帮助文档 Branch the middleware pipeline

支持(0) 反对(0) dudu | 园豆:36310 (高人七级) | 2022-09-22 22:01

可以改用 UseWhen

支持(0) 反对(0) dudu | 园豆:36310 (高人七级) | 2022-09-22 22:02

调试的时候是走了app.MapWhen的,改成UseWhen也会走。app.map的作用我可以理解,但是它确实在执行了app.map后,又去执行了app.MapWhen。但是我不理解为什么请求参数在MapWhen方法里丢失了,为什么要这么做呢

支持(0) 反对(0) 微若思丢丢 | 园豆:156 (初学一级) | 2022-09-23 18:54
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册