2017-09-14 80 views
1

我有一個角度應用(由淨4.6和MVC5支持)與途徑如Asp.net MVC路由具有角

/admin 
/admin/manageusers 
/admin/export 

如果我的asp.net應用程序發送我可以通過客戶端路由達到這些我到/管理員。

但是,如果我刷新頁面MVC的路由引擎不知道從哪裏送我,我結束了一個404

我試圖爲這許多變化,我能想到的與沒有成功。

context.MapRoute(
    "Admin_root", 
    "Admin/{*url}", 
    new { area = "Admin", controller = "Admin", action = "Index" }); 

有沒有辦法告訴MVC忽略傳統上控制器和操作,只是繼續索引操作?

有沒有辦法建立一個捕獲所有的路線,將忽略通常是控制器和行動?

回答

2

ASP.NET Core Angular項目模板包含一個針對此目的的調用MapSpaFallbackRoute。你可以在Github中看到這個詳細的解釋。

下面的代碼示例:

app.UseStaticFiles(); 

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

    routes.MapSpaFallbackRoute(
     name: "spa-fallback", 
     defaults: new { controller = "Home", action = "Index" }); 
}); 

以下是部分原因:

而且,由於MapSpaFallbackRoute是最後,任何其他請求不似乎是靜態文件會通過在HomeController上調用索引操作來提供服務。此操作的視圖應該爲您的客戶端應用程序代碼提供服務,允許客戶端路由系統處理所請求的任何URL。

如果您尚未擁有它,則需要參考Microsoft.AspNetCore.SpaServices

編輯:既然你已經指定你不使用ASP.NET核心,請看看這個asnwer:How to use ASP.NET MVC and AngularJS routing?。這與我所描述的類似,但是對於ASP.NET MVC 5來說,這個解決方案表明它的確基本上和你所描述的一樣。

+0

我喜歡這一點,但.netcore圖書館還不是我們的選擇。 – Joe

+0

鏈接的答案效果很好。謝謝你的答案。 – Joe