C# 在使用MapWhen进行分支时注册中间件,以便仅为一组端点运行它

C# 在使用MapWhen进行分支时注册中间件,以便仅为一组端点运行它,c#,asp.net-core,asp.net-core-middleware,C#,Asp.net Core,Asp.net Core Middleware,我需要为我的所有端点运行两个中间件,但在/accounts/*下的端点除外 我在ConfigureServices中使用此选项: public void ConfigureServices(IServiceCollection services) { ... services.AddControllers(); } 配置方法如下所示: public void Configure(IApplicationBuilder app, IWebHostEnvironment env,

我需要为我的所有端点运行两个中间件,但在/accounts/*下的端点除外

我在ConfigureServices中使用此选项:

public void ConfigureServices(IServiceCollection services)
{
    ...
    services.AddControllers();
}
配置方法如下所示:

public void Configure(IApplicationBuilder app, IWebHostEnvironment env, IUserService  userService)
{
    app.UseCors(builder => builder
        //.AllowAnyOrigin()
        .SetIsOriginAllowed((host) => true)
        .AllowAnyMethod()
        .AllowAnyHeader()
        .AllowCredentials());

    app.UseRouting();

    app.UseAuthentication();

    //THIS IS WHAT I JUST ADDED TO SUPPORT THE BRANCHING OF ROUTES
    app.MapWhen(context =>
    {
        return !context.Request.Path.StartsWithSegments("/accounts");
    }, appBuilder =>
    {
        appBuilder.UseMiddleware<TenantProviderMiddleware>();
        appBuilder.UseMiddleware<UserClaimsBuilderMiddleware>();
    });

    //app.UseMiddleware<TenantProviderMiddleware>();
    //app.UseMiddleware<UserClaimsBuilderMiddleware>();

    app.UseAuthorization();

    app.UseEndpoints(endpoints =>
    {
        endpoints.MapHub<VehicleHub>("/vehicle-hub");
        endpoints.MapControllers();
    });

 }
public void配置(IApplicationBuilder应用程序、IWebHostEnvironment环境、IUserService用户服务)
{
app.UseCors(builder=>builder
//.AllowAnyOrigin()
.SetIsOriginAllowed((主机)=>true)
.AllowAnyMethod()
.AllowAnyHeader()
.AllowCredentials());
app.UseRouting();
app.UseAuthentication();
//这就是我刚才添加的支持路由分支的内容
app.MapWhen(上下文=>
{
return!context.Request.Path.StartsWithSegments(“/accounts”);
},appBuilder=>
{
appBuilder.UseMiddleware();
appBuilder.UseMiddleware();
});
//app.UseMiddleware();
//app.UseMiddleware();
app.UseAuthorization();
app.UseEndpoints(端点=>
{
端点.MapHub(“/vehicle hub”);
endpoints.MapControllers();
});
}
但我得到了以下错误:

System.InvalidOperationException:请求到达管道的末尾,但未执行端点:“WebAPI.Controllers.vehicleController.Get(WebAPI)”。如果使用路由,请使用“IAApplicationBuilder.UseEndpoints(…)”注册终结点中间件

从这个错误中,我了解到我应该在MapWhen方法中使用UseEndpoints而不是UseMiddleware,但无法正确使用它

那么,我应该如何注册这些中间件呢?

看起来您需要,根据:

…根据给定谓词的结果分支请求管道。与
MapWhen
不同,如果此分支没有短路或包含终端中间件,则会重新连接到主管道

因为您正在使用
MapWhen
UseAuthorization
UseEndpoints
对您的
/accounts/
路径没有影响。您显示的错误是因为端点中间件没有在此场景中运行