我正在創建一個應支持多種語言的MVC5網站。該應用程序的結構很複雜,所以我只使用屬性路由。 RouteConfig.cs
很簡單:爲多語言站點配置ASP.NET MVC屬性路由
public static void RegisterRoutes(RouteCollection routes)
{
routes.IgnoreRoute("{resource}.axd/{*pathInfo}");
routes.MapMvcAttributeRoutes();
}
我想通過網站名稱後添加語言標識,以保持語言信息的URL。對於默認語言的英語,URL應該保持「乾淨」。這裏有一個例子:
http://test.com/foo/1/bar/2
http://test.com/de/foo/1/bar/2
我第一次嘗試使用兩個RoutePrefix
屬性爲每個控制器:
[RoutePrefix("foo")]
[RoutePrefix("{lang}/foo")]
但MVC不允許使用超過一個RoutePrefix
屬性的控制器。
所以現在我不使用RoutePrefix
屬性可言,並指定每個控制器動作全路線:
[Route("foo/{a}/bar/{b}")]
[Route("{lang}/foo/{a}/bar/{b}")]
有沒有更好的方式來處理lang
路線?理想情況下,我想只在一個地方指定,而不是每個控制器。
PS。我通過在自定義過濾器中解析語言路由來設置當前線程文化。
看一看[這個答案](http://stackoverflow.com/questions/32764989/asp-net-mvc-5-culture-in-route-and-url#32839796)。對於屬性路由,請閱讀註釋。 – NightOwl888
所以你的建議只是爲每個動作添加兩條路線?或者我錯過了什麼? –
您可以1)每個動作添加2個路由2)使用傳統路由或3)分析MapMvcAttributeRoutes源,併爲每個Route屬性註冊一個本地化路由(請務必在調用您的自定義方法之前'MapMvcAttributeRoutes'將路由以正確的順序放入RouteTable中)。 – NightOwl888