【问题标题】:Difference between UseWhen and MapWhen in asp.net core 5asp.net core 5中UseWhen和MapWhen的区别
【发布时间】:2021-08-22 19:48:25
【问题描述】:

我知道如果谓词返回 true,那么 UseWhen 将在运行新分支后加入主分支,而 MapWhen 在运行新分支后不会加入主分支[理论上]。

但是当我尝试有目的地调用 MapWhen 中的 next 方法时,它实际上并入了主分支。

private void HandleBranch(IApplicationBuilder app, ILogger<Startup> logger)
    {
        app.Use(async (context, next) =>
        {
            // Do work that doesn't write to the Response.
            logger.LogInformation("branch middleware before");
            // call the next component in the middleware pipeline
            await next.Invoke();
            // Do logging or other work that doesn't write to the Response.
            logger.LogInformation("branch middleware after");
        });
    }

例如,如果我对 UseWhen 和 MapWhen 都使用上述方法,那么我将得到相同的管道执行结果,即。 如果谓词为真,则执行 HandleBranch,然后执行管道中的下一个中间件。理想情况下,我期望 MapWhen 会抛出一些异常或只是自行短路管道。

我什至尝试为每个人浏览 github repo 和 microsoft 文档,但仍然不确定我在这里缺少什么。

【问题讨论】:

  • 与您的期望不同,您现在得到了什么,您能否分享一些细节?
  • @MdFaridUddinKiron 对我来说,MapWhen 和 UseWhen 都合并到主分支中
  • 我怀疑 await next.Invoke(); 在这里工作而不是 await next();。请您尝试await next(); 让我知道您的更新。
  • 恐怕在这种情况下两者的行为相似,即它们继续与主分支合并
  • 能否请您在这里分享您的middleware 代码,以便我检查

标签: c# asp.net-core .net-core


【解决方案1】:

也许解决方案很简单。使您的方法(HandleBranch)private 变为 public

对于调用,管道中的下一个中间件,使用这个:-

await next();

希望,它会解决您的问题。

【讨论】:

    猜你喜欢
    • 2018-06-08
    • 2021-12-30
    • 2022-01-04
    • 2016-10-07
    • 1970-01-01
    • 2020-11-25
    • 1970-01-01
    • 2021-11-16
    • 1970-01-01
    相关资源
    最近更新 更多