有一个 Asp.NET Core 2.0 应用程序,我想映射任何不以/api
重新执行到根路径。我添加了以下内容,但似乎不起作用:
app.MapWhen(
c => !c.Request.Path.StartsWithSegments("/api", StringComparison.OrdinalIgnoreCase),
a => a.UseStatusCodePagesWithReExecute("/")
);
不使用 MapWhen() 而只是使用app.UseStatusCodePagesWithReExecute("/")
适用于除 root 之外的所有路径。只是想为所有非 root 的路径添加过滤/api
。关于如何做到这一点有什么想法吗?
分支管道在这里无法正常工作,因为您没有在状态代码页中间件之后添加 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重写中间件 https://learn.microsoft.com/en-us/aspnet/core/fundamentals/url-rewriting?tabs=aspnetcore2x:
var options = new RewriteOptions()
.AddRewrite(@"^(?!/api)", "/", skipRemainingRules: true);
app.UseRewriter(options);
app.UseMvc();
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)