我正在尝试将所有未映射的URL路由到后备路由,如果路由未映射,我将控制请求的行为。以下是启用此功能的代码。该站点还启用了SPA,并且通过添加回退捕获所有路由,除非我添加排除约束,即不以“ -ng”结尾的任何路由都不会路由到此回退,否则SPA停止工作。 / p>
app.UseStaticFiles();
app.UseSpaStaticFiles();
app.UseMvc(routes => {
routes.MapRoute(
name: "default",
template: "{controller}/{action}/{id?}",
defaults: new { controller = "Home", action ="Index" }
);
routes.MapRoute(
name: "fallback",
template: "{*slug}",
defaults: new { controller = "Fallback", action = "Index" },
constraints: new
{
serverRoute = new ServerRouteConstraint(url => !url.PathAndQuery.EndsWith("-ng", StringComparison.InvariantCultureIgnoreCase))
}
);
});
app.UseSpa(spa =>
{
spa.Options.SourcePath = "ClientApp";
if (env.IsDevelopment())
{
spa.UseAngularCliServer(npmScript: "start");
}
});
排除约束似乎已经完成了工作,但现在看来我也必须向静态文件添加排除约束。我想避免通过文件扩展名排除,但这使我认为UseSpaStaticFiles调用仅被后备路由覆盖。
如果有办法让SPA路由优先于我的后备路由,那将有帮助。或有一种方法可以在回退之前按本地目录路由所有静态文件。