我关注了this指南,它在我的语言支持下运行良好。网址如 http://domain.com:33982/en-us/Test效果很好。
但是我的问题是我希望它可以使用 http://domain.com:33982/Test也是如此。我无法弄清楚如何在没有链接文化的情况下路由它... 我在RouteConfig.cs中的路线
routes.MapRoute(
name: "Default",
url: "{culture}/{controller}/{action}/{id}",
defaults: new { culture = CultureHelper.GetDefaultCulture(), controller = "Home", action = "Index", id = UrlParameter.Optional }
);
routes.MapRoute(
name: "MissingCulture",
url: "{controller}/{action}/{id}",
defaults: new { culture = CultureHelper.GetDefaultCulture(), controller = "Test", action = "PageMissing", id = UrlParameter.Optional }
);
我真的不明白为什么它不起作用。当我进入/ Test只是将我重定向到默认的Home / Index。
有什么建议吗?感谢
答案 0 :(得分:4)
这是因为第一条和第二条路线都匹配。可选参数使应用程序选择匹配的第一个:所以第一个总是被选中。
试试这个:
routes.MapRoute( name: "DefaultWithCulture"
, url: "{culture}/{controller}/{action}/{id}"
, defaults: new { culture = "en-us", controller = "Home", action = "Index", id = UrlParameter.Optional }
, constraints: new { culture = "[a-z]{2}-[a-z]{2}" }
);
routes.MapRoute( name: "Default"
, url: "{controller}/{action}/{id}"
, defaults: new { culture = "xx-xx", controller = "Home", action = "Index", id = UrlParameter.Optional }
);
它可以在这里工作(在他们背后侮辱文化):
http://host/ (en-us)
http://host/Home/Index (xx-xx)
http://host/zh-cn/Home/Index (zh-cn)