【发布时间】:2014-04-28 16:32:14
【问题描述】:
我正在尝试制作一个多语言的 ASP.NET MVC 站点。 这是我需要 URL 的样子
www.mysite.com/home -> 必须是英文并且调用 Home 控制器的 Index 动作
www.mysite.com/test -> 必须是英文并且调用Test控制器的Index动作
www.mysite.com/es/home -> 必须是西班牙语并调用 Home 控制器的 Index 操作
www.mysite.com/es/test -> 必须是西班牙语并调用测试控制器的索引操作
这是我的溃败表的样子。 我不喜欢的是同一件事我需要有 2 个条目。
routes.MapRoute(
name: "controller",
url: "{controller}",
defaults: new { lang = "en", controller = "Home", action = "Index" }
);
routes.MapRoute(
name: "multilang-controller",
url: "{lang}/{controller}",
defaults: new { lang = "en", controller = "Home", action = "Index" },
constraints: new { lang = "en|es|de|fr" }
);
我想只有这样的东西
routes.MapRoute(
name: "controller",
url: "{lang}\{controller}",
defaults: new { lang = "en", controller = "Home", action = "Index" },
constraints: new { lang = "en|es|de|fr" }
);
但这不起作用,因为当我调用 www.mysite.com/test 时,它会将 test 映射到 lang,并且因为它违反约束,所以会抛出 404。
必须有更优雅的方式来做到这一点,而不是每个案例都有 2 条记录。
【问题讨论】:
-
它们是两种不同的路由模式,所以我认为您将需要两条不同的路由。我真的不认为那是“不优雅”。
-
我担心路由表的数据量会是它需要的两倍。
-
差别可以忽略不计。
-
是的 Ant P,可能是真的……我只是在想,如果有更好的选择……
标签: c# asp.net asp.net-mvc asp.net-mvc-routing