【发布时间】: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