0

我的网站在首页以 30 多种语言显示用户提交的内容,我目前使用的路径如下:

http://www.example.com?lang=en 

或者如果它不是第一页

 http://www.example.com?lang=en&page=2

但这确实对用户或 seo 不友好。mvc中有没有办法将这些值路由到类似的东西

 http://www.example.com/en 

 http://www.example.com/en/2

在这种情况下,无需在中间添加新的操作lang

http://www.example.com/lang/en/2

更新。这是我从 Alexeis 的回答中得出的,以防有人需要同样的东西:

如果只是语言:

 routes.MapRoute("MyLang", "{lang}", new { controller = "Home", action = "Index" },new { lang = @"\D{2}"});

如果您需要语言和可选页面:

   routes.MapRoute("MyLang", "{lang}/{page}", new { controller = "Home", action = "Index", page = UrlParameter.Optional }, new { lang = @"\D{2}", page = @"\d+"});

除非您的操作只有 2 个字母,否则它不应捕获任何其他路径。

4

2 回答 2

1

您不需要“lang/”来匹配文化。只要您以某种方式对路由进行排序,以便其他路由正确匹配,简单的“{lang}”就可以了。您还可以考虑对路由参数进行约束以限制冲突的数量。

routes.MapRoute("MyLang", "{lang}",
     new { controller = "Home", action = "Home",  }

class HomeController{
  public ActionResult Home(string lang)
  {
    return View();
  }
}
于 2012-04-23T16:41:40.773 回答
0

你可以像这样添加一条新路线

routes.MapRoute("MyLang", "{action}/{page}",
     new { controller = "ControllerName",page=0 }

这样,语言名称将自动映射到操作,并且页面将作为参数传递,前提是您的操作签名为

public ActionResult English(int page)

obsly 可以更改返回类型和操作名称

于 2012-04-23T16:46:23.043 回答