有一个Asp.NET Core 2.0应用程序,我想映射任何不以/api
开头的路径,只是重新执行到根路径。我添加了以下内容,但似乎无法正常工作:
app.MapWhen(
c => !c.Request.Path.StartsWithSegments("/api", StringComparison.OrdinalIgnoreCase),
a => a.UseStatusCodePagesWithReExecute("/")
);
不使用MapWhen(),只使用app.UseStatusCodePagesWithReExecute("/")
适用于非root的所有路径。只想为所有非根路径而不是/api
添加过滤。关于如何做到这一点的任何想法?
答案 0 :(得分:3)
分支管道在此处无法正常工作,因为您尚未在状态代码页中间件之后添加MVC中间件。这是正确的管道设置:
public void Configure(IApplicationBuilder app, IHostingEnvironment env)
{
app.MapWhen(
c => !c.Request.Path.StartsWithSegments("/api", StringComparison.OrdinalIgnoreCase),
a =>
{
a.UseStatusCodePagesWithReExecute("/");
a.UseMvc();
});
app.UseMvc();
}
请注意,中间件顺序在这里很重要,您应该在MVC之前添加状态代码页中间件。
然而,使用条件管道似乎有点矫枉过正。您可以使用URL Rewriting Middleware实现目标:
var options = new RewriteOptions()
.AddRewrite(@"^(?!/api)", "/", skipRemainingRules: true);
app.UseRewriter(options);
app.UseMvc();