ASP.NET 5 + Angular 2 路由(模板頁面未重新載入)
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 => { 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 傳遞到客戶端以進行正確的路由。