【问题标题】:asp net mvc url routing strategy and internationalizationasp net mvc url 路由策略及国际化
【发布时间】:2012-02-24 13:36:00
【问题描述】:

我有一个网址如下的网站: www.mysite.com/controller/action/id

我需要为其他语言(英语)创建 url,所以我使用了 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 而另一条不带它的路线不起作用,可能是因为路线集合中的顺序丢失了?

【问题讨论】:

    标签: asp.net-mvc url internationalization routes


    【解决方案1】:

    我通过我所有的语言循环解决了这个问题:

        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”,您需要为其设置默认语言缩写(在我的情况下为“en”)。

    希望它会有所帮助。

    【讨论】:

    • 我对其进行了一些调整:在循环中,我添加 {lang} 代替 language.LanguageAbbreviation),并删除路由的默认值(并为“lang”参数添加约束)然后它避免循环语言,它工作正常。谢谢!
    猜你喜欢
    • 2011-09-07
    • 1970-01-01
    • 1970-01-01
    • 2010-11-04
    • 1970-01-01
    • 2012-10-06
    • 1970-01-01
    • 2010-12-30
    • 2016-12-02
    相关资源
    最近更新 更多