我正在创建一个应支持多种语言的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