如何在url中携带culture参数作为路由参数而不是请求参数?

时间:2012-12-22 13:42:42

标签: asp.net asp.net-mvc-4 asp.net-mvc-routing

我想创建一个自定义路由系统ASP.NET MVC 4项目,以使我的网站多语言。我想在url中携带culture参数,如localhost / en / controllerName / actionName。但问题是当我写例如localhost / home路由引擎假设“home”作为文化名称。我该如何解决这个问题?

1 个答案:

答案 0 :(得分:0)

如果您的所有路线都强制执行文化参数,您可以使用以下内容:

routes.MapRoute(
    name: "LocalizedDefault",
    url: "{lang}/{controller}/{action}/{id}",
    defaults: new { controller = "Home", action = "Index", id = UrlParameter.Optional },
    constraints: new { lang = @"(es|en|fr)" }
);

如果您仍想回复localhost/home,请在上面的路线之后设置默认路线,这样第一个路线就会因为限制而不匹配,然后回到第二个:

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