首页 > 解决方案 > 从中间件中排除路由 - .net core

问题描述

我在应用程序中有 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

解决方案


您可以使用MapWhen带有否定谓词的扩展方法:

app.MapWhen(
    httpContext => !httpContext.Request.Path.StartsWithSegments("/pathtoexclude"),
    subApp => subApp.UseMyMiddleware()
);

注意MapWhen将终止管道,因此如果您希望管道在此之后继续,您可以使用app.UseWhen


推荐阅读