Asp.net

ASP.NET 5 + Angular 2 路由(模板頁面未重新載入)

  • January 6, 2016

Angular 2 beta 預設使用 html5 路由。但是,當您轉到一個組件並且路由更改(例如<http://localhost:5000/aboutus>)並且您重新載入/刷新頁面時,沒有載入任何內容。

這篇文章中也提出了這個問題。大多數答案都說,如果我們要在 Angular 2 中追求 HTML5 路由,那麼應該在伺服器端處理這個路由問題。更多討論在這裡

我不確定如何使用 asp.net 伺服器環境來處理這個問題。

任何 angular 2 開發人員也使用 asp.net 並遇到此問題?

PS。我正在使用 ASP.NET 5。我的 Angular 2 路由正在使用 MVC 路由。

您看到的問題與客戶端上的 Angular 路由和 MVC 伺服器端路由之間的區別有關。您實際上得到了一個404 Page Not Found錯誤,因為伺服器沒有該路由的控制器和操作。我懷疑你沒有處理錯誤,這就是為什麼它看起來好像什麼也沒發生。

當您重新載入http://localhost:5000/aboutus或嘗試直接從快捷方式連結到該 URL 或通過在地址欄中鍵入它(深度連結)時,它會向伺服器發送請求。ASP.NET MVC 將嘗試解析該路由,在您的情況下,它將嘗試載入aboutusController並執行該Index操作。當然,這不是你想要的,因為你的aboutus路由是一個 Angular 組件。

您應該做的是為 ASP.NET MVC 路由器創建一種方法,以將應該由 Angular 解析的 URL 傳遞回客戶端。

在您的Startup.cs文件中,在Configure()方法中,將“spa-fallback”路由添加到現有路由:

app.UseMvc(routes =&gt;
{
   routes.MapRoute(
       name: "default",
       template: "{controller=Home}/{action=Index}/{id?}");

   // when the user types in a link handled by client side routing to the address bar 
   // or refreshes the page, that triggers the server routing. The server should pass 
   // that onto the client, so Angular can handle the route
   routes.MapRoute(
       name: "spa-fallback",
       template: "{*url}",
       defaults: new { controller = "Home", action = "Index" }
   );
});

通過創建一個指向最終載入 Angular 應用程序的控制器和視圖的包羅萬象的路由,這將允許將伺服器未處理的 URL 傳遞到客戶端以進行正確的路由。

引用自:https://stackoverflow.com/questions/34628536