Asp.net mvc 捕获所有干扰静态文件的路由
我试图将所有未映射的URL路由到回退路由,如果路由未映射,我将控制请求的行为。下面是启用此功能的代码。此站点还启用了SPA,通过添加后备全面覆盖路由,SPA将停止工作,除非我添加了排除约束,即任何不以“-ng”结尾的路由都不会路由到此后备路由Asp.net mvc 捕获所有干扰静态文件的路由,asp.net-mvc,asp.net-core,Asp.net Mvc,Asp.net Core,我试图将所有未映射的URL路由到回退路由,如果路由未映射,我将控制请求的行为。下面是启用此功能的代码。此站点还启用了SPA,通过添加后备全面覆盖路由,SPA将停止工作,除非我添加了排除约束,即任何不以“-ng”结尾的路由都不会路由到此后备路由 app.UseStaticFiles(); app.UseSpaStaticFiles(); app.UseMvc(routes => { routes.MapRoute( name: "default",
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路线优先于我的退路,那会有所帮助。或者在使用回退之前,有一种方法按本地目录路由所有静态文件。只要您的静态文件存在,
UseStaticFiles
就应该在MVC中间件接管请求之前注意到它们并提供它们。谢谢您的帮助,也许我的文件位于错误的位置。我将对此进行调查,并根据需要更新我的问题。是的。由于静态文件中间件是在MVC中间件(包括路由)之前声明的,因此任何作为静态文件存在的URL都将首先作为这些静态文件使用,否则将落入MVC中间件管道。唯一可以解释的是,如果这些文件不是以静态文件的形式存在,那么它们就会被“一网打尽”的方式捕获。
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");
}
});