2016-03-14 44 views
3

我正在使用ASP.NET 5/MVC 6,並且我託管AngularJS SPA。如何總是爲每個請求默認路由

我使用的UI路由器,它工作正常,但當我刷新頁面上的路線,例如/customer/5我得到一個空白頁。我期望這是因爲我沒有與該路線相關的路線/控制器。

理想情況下,我希望MVC提供包含我所有AngularJS代碼的「index.html」(我的默認頁面),然後讓UI路由器顯示正確的頁面。

我該怎麼做?這是我目前Configure功能的Startup.cs

app.UseMvc(); 
app.UseDefaultFiles(); 

app.UseStaticFiles(); 
+0

您可在'UseMvc'呼叫配置路由:https://github.com/aspnet/Mvc/blob/25eb50120eceb62fd24ab5404210428fcdf0c400/src/Microsoft.AspNetCore.Mvc.Core/Builder/MvcApplicationBuilderExtensions.cs#L66 – Smudge202

+0

你有問題在你的角度路由我認爲 –

+0

檢查此問題http://stackoverflow.com/questions/35926027/invoke-same-action-for-all-urls-in-asp-net-core-mvc/35927964#35927964 – tmg

回答

5

一個子集MVC之前添加自定義中間件的管道來處理所有非Ajax和非靜態文件的請求。

app.UseStaticFiles(); 

app.Use(async (context, next) => 
{ 
     if (!Path.HasExtension(context.Request.Path.Value) && context.Request.HttpContext.Request.Headers["X-Requested-With"] != "XMLHttpRequest") 
     { 
      await context.Response.WriteAsync(System.IO.File.ReadAllText("index.html")); 
     } 

     await next(); 
}); 

app.UseMvc(); 
+0

謝謝,這工作正常,但如果我刪除'UseMVC()'它的工作原理,但如果我刪除'services.AddMvc();'我得到一個錯誤, 爲什麼是這樣?我使用WebAPI控制器,「AddMvc」調用是否允許此功能起作用,UseMVC調用僅用於傳統的剃刀渲染? – Chris

+0

所有在asp.net-core中都是相同的控制器。他們不會工作。我會在今天晚些時候更新答案。 – tmg

+1

@Chris更新了答案 – tmg

1

我使用Asp.net核心時1.1網頁API & SPA(陣營 - 終極版從CLI創建)分別有同樣的問題。 我主持SPA作爲wwwroot文件夾內的靜態文件

下面的代碼適用於我。

app.UseDefaultFiles(); 
app.UseStaticFiles(); 

app.Use(async (context, next) => 
{ 
    if (!context.Request.Path.Value.Contains("/api")) 
    { 
     context.Response.Redirect("/"); 
     //context.Response.Redirect($"/#{context.Request.Path.Value}"); 
     return; 
    } 
    await next(); 
}); 
app.UseMvc();