1

我创建了 2 条这样的路线来执行本地化:

routes.MapRoute(
                "Default", // Route name
                "{language}/{controller}/{action}/{id}", // URL with parameters
                new { language = "en", controller = "Home", action = "Index", id = UrlParameter.Optional } // Parameter defaults
               );

routes.MapRoute(
                "Default2", 
                "{language}/{controller}/{action}/{id}/{slug}",
                new { language = "en", controller = "Home", action = "Index", id = UrlParameter.Optional, slug = UrlParameter.Optional }
               );

现在我遇到了两个问题:

  1. 默认www.mydomainname.com不会自动添加en到 URL。期望结果:当我输入时www.mydomainame.com它应该自动更改为www.mydomainname.com/en.

  2. 当我改变文化时。我怎样才能用那种文化替换language segment's value路由上的默认值?TwoLetterISOLanguageName

请指教

4

1 回答 1

1

这是一个大概的答案,所以我希望它能让你走上正轨。

CultureInfo.TwoLetterISOLanguageName 是一个非静态字段,将取决于用户,因此您将不得不使用重定向来实现这一点(它不能在 global.asax 文件中设置)。

一种方法是当用户请求域名时,使用正常的默认路由将它们路由到家庭控制器

 routes.MapRoute(
    name: "TypicalDefault",
    url: "{controller}/{action}/{id}",
    defaults: new { controller = "Home", action = "Index", id = UrlParameter.Optional }
 );

在家庭控制器中,将它们重定向到正确的路线

 public ActionReult Index(){
    var routeDataDict = HttpContext.Request.RequestContext.RouteData.Values;
    routeDataDict.Add("language", CultureInfo.TwoLetterISOLanguageName);
    Response.RedirectToRoute(routeDataDict);
 }
于 2013-06-02T09:31:58.630 回答