从中间件中排除路由 - .net核心

问题描述 投票:0回答:1

我在应用程序中有2个中间件。我想从这些中间件中排除一条路由。我试过的是创建一个BuildRouter函数并通过它应用中间件但这不起作用。

public IRouter BuildRouter(IApplicationBuilder applicationBuilder)
{
    var builder = new RouteBuilder(applicationBuilder);

    builder.MapMiddlewareRoute("/api/", appBuilder => {
        appBuilder.ApplyKeyValidation();
        appBuilder.ApplyPolicyValidation();
    });

    return builder.Build();
}

而配置方法是

public void Configure(IApplicationBuilder app, IHostingEnvironment env)
{
    if (env.IsDevelopment())
    {
        app.UseDeveloperExceptionPage();
    }
    else
    {
        app.UseHsts();
    }

    app.UseRouter(BuildRouter(app));

    app.UseHttpsRedirection();
    app.UseMvc();       
}

但这不起作用。

c# asp.net-core .net-core
1个回答
3
投票

您可以将MapWhen扩展方法与否定谓词一起使用:

app.MapWhen(
    httpContext => !httpContext.Request.Path.StartsWithSegments("/pathtoexclude"),
    subApp => subApp.UseMyMiddleware()
);
© www.soinside.com 2019 - 2024. All rights reserved.