Asp.net mvc 捕获所有干扰静态文件的路由

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",

我试图将所有未映射的URL路由到回退路由,如果路由未映射,我将控制请求的行为。下面是启用此功能的代码。此站点还启用了SPA,通过添加后备全面覆盖路由,SPA将停止工作,除非我添加了排除约束,即任何不以“-ng”结尾的路由都不会路由到此后备路由

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");
    }
});