ASP.Net MVC 5使用文化URL进行路由

时间:2014-01-20 13:20:43

标签: c# asp.net asp.net-mvc asp.net-mvc-routing asp.net-mvc-5

我关注了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。

有什么建议吗?感谢

1 个答案:

答案 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)