ASP.NET核心映射路由到静态文件处理程序

pbz*_*pbz 6 asp.net-mvc asp.net-mvc-5 asp.net-core-mvc asp.net-core

我正在使用Angular在ASP.NET Core网站(以前称为ASP.NET 5/vNext)上工作.为了让Angular工作,我需要一个全能的路线:

app.UseStaticFiles(); 
app.UseMvc(routes =>
        {
            // Angular fallback route
            routes.MapRoute("angular", "{*url}", new { controller = "Home", action = "Index" });                
        });
Run Code Online (Sandbox Code Playgroud)

我在wwwroot中也有一些文件/文件夹,如:

wwwroot/app
wwwroot/assets
wwwroot/lib
Run Code Online (Sandbox Code Playgroud)

例如http://example.com/assets/css/test.css,当对这些路径发出任何请求且文件(test.css)不存在时,它不应继续到回退路由.它应该返回404.

现在,如果文件不存在,则返回Angular HTML.那么,我怎么能告诉它任何以'/ assets'开头的路径应该只被路由/服务UseStaticFiles

谢谢.

pbz*_*pbz 6

这似乎有效:

app.MapWhen(context =>
        {
            var path = context.Request.Path.Value;
            return path.StartsWith("/assets", StringComparison.OrdinalIgnoreCase) ||
                   path.StartsWith("/lib", StringComparison.OrdinalIgnoreCase) ||
                   path.StartsWith("/app", StringComparison.OrdinalIgnoreCase);
        }, config => config.UseStaticFiles());
Run Code Online (Sandbox Code Playgroud)

但是,我不确定是否存在任何性能(或其他类型)影响.如果我遇到任何问题,我会更新.