2017-04-19 56 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

這兩個正則表達式似乎都不能正常工作... –