C# 在使用MapWhen进行分支时注册中间件,以便仅为一组端点运行它
我需要为我的所有端点运行两个中间件,但在/accounts/*下的端点除外 我在ConfigureServices中使用此选项: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,
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/
路径没有影响。您显示的错误是因为端点中间件没有在此场景中运行