2017-04-19 97 views
1

我希望除了/api/*之外的所有请求都击中wwwroot文件夹中的默认文件,因为我正在运行一个Spa!所有ASPNET核心路由去DefaultFiles

我有这样的配置:

app.UseIdentityServer(); 
app.UseIdentityServerAuthentication(new IdentityServerAuthenticationOptions 
{ 
    Authority = identityServerAppOptions.Value.Authority, 
    RequireHttpsMetadata = false, 

    ApiName = "all", 

}); 
app.UseDefaultFiles(new DefaultFilesOptions 
{ 
    DefaultFileNames = new List<string> { "index.html" } 
}); 
app.UseStaticFiles(new StaticFileOptions 
{ 
    OnPrepareResponse = ctx => 
    { 
     ctx.Context.Response.Headers.Append("Cache-Control", "no-cache"); 
    } 
}); 
app.UseMvc(routes => routes.MapRoute(
     name: "default", 
     template: "api/{controller=Details}/{id?}")); 

但路线/Account/Login不从静态文件位置的默认文件。

我试过在静态文件选项上使用RequestPath,但这听起来不像是正确的事情!

+1

你有磁盘上的wwwroot/Account/Login/index.html文件吗? –

+0

没有所有的文件都在'wwwroot'中,用于服务SPA应用程序 –

回答

2

使用URL Rewriting Middleware和正则表达式可以选择性地将请求URL重写为/index.html

要跳过所有的请求开始/api/*使用正则表达式:@"^(?!api/).*$"

要跳过所有的请求开始/api/*,并包含一个点.所有请求:@"^(?!api/|.*\..*).*$"

var options = new RewriteOptions().AddRewrite(@"^(?!api/|.*\..*).*$", "index.html", true); 
app.UseRewriter(options); 

//should be after a rewriter in middleware pipeline 
app.UseDefaultFiles(); 
app.UseStaticFiles(); 

附:正则表达式可以通过优化,我猜。但是这个概念是一样的。

+0

这不接受文件请求,所以'vendor.js'会被重写为'index.html' –

+0

我只是做了'^ \/(?!api /).*$'而不是 –

+0

这两个正则表达式似乎都不能正常工作... –