asp net mvc url路由策略和国际化

时间:2012-02-01 20:50:23

标签: asp.net-mvc url internationalization routes

我的网站上有这样的网址: www.mysite.com/controller/action/id

我需要为其他语言(英语)创建网址,因此我使用了MultiCultureMvcRouteHandler的ALEX ADAMYAN实现。所以现在我有这样的网址:

www.mysite.com/en/controller/action/id
www.mysite.com/fr/controller/action/id

但是我需要保持我的旧网址有默认值,即具有:

www.mysite.com/en/controller/action/id
www.mysite.com/controller/action/id

所以我想知道如何修改路由,在他的实现中,alex循环路由并将en / fr参数添加到所有路由,以便覆盖以前的路由,然后删除以前的URL,我想要避免的。
如果我复制所有路由以保持一个与fr / en和一个没有它不起作用,可能是因为订单在路径集合中丢失了?

1 个答案:

答案 0 :(得分:2)

我解决了循环遍历所有语言的问题:

    public static List<Language> Languages;
    public static void RegisterRoutes(RouteCollection routes)
    {
        routes.IgnoreRoute("{resource}.axd/{*pathInfo}");
        LanguageRepository langRepo = new LanguageRepository();
        Languages = langRepo.GetAllLanguages();

        foreach (Language language in Languages)
        {
            routes.MapRoute(
            "Localization_" + language.LanguageAbbreviation,
            language.LanguageAbbreviation + "/{controller}/{action}/{id}",
            new { lang = language.LanguageAbbreviation, controller = "Home", action = "Index", id = UrlParameter.Optional });
        }
        routes.MapRoute(
            "Default", 
            "{controller}/{action}/{id}", 
            new {lang = "en", controller = "Home", action = "Index", id = UrlParameter.Optional });
    }

其中langabbreviation喜欢“en”或“ru”。

最后一条路线是“默认”“无法语言”网址,例如“www.site.com/controller/action”,你需要为它设置默认的lang abbr(在我的例子中为“en”)。

希望它会有所帮助。