【发布时间】:2012-03-15 01:04:12
【问题描述】:
我希望有一条路线可以选择两个网址,但映射到一个操作。一个很好的例子是多语言应用程序。让我们以英语和法语为例。
一开始这似乎很简单,技术上你可以做到:
routes.MapRoute(
"the hi route english" ,
"welcome/sayhi/{id}" ,
new { controller = "Welcome" , action = "SayHi" , id = UrlParameter.Optional }
);
routes.MapRoute(
"the hi route french" ,
"bienvenu/direallo/{id}" ,
new { controller = "Welcome" , action = "SayHi" , id = UrlParameter.Optional }
);
但这意味着您必须为每个操作定义两条路线。或者更好的解决方案,创建一个自定义 Route 类,该类需要更多参数来处理双语。
如果我选择选项 1 或 2,这意味着我必须定义 WelcomeController 的每一个路由,因为我不能在我的路由中使用 {action}。
理想情况下,我希望能够通过元数据至少定义动作名称,然后通过反射或其他方式获取它。
即:
[ActionName( { "fr", "direallo" }, {"en", "sayhi"})]
public ActionResult SayHi(string id){
//check current thread culture...
}
我不太确定从哪里开始,有什么想法吗?提示?
谢谢,
【问题讨论】:
-
它非常好,但我想知道是否有某种方法可以避免在控制器之外构建字典。
-
我认为这是一个配置项,无论如何都应该在控制器之外。但这只是我的两分钱
标签: c# asp.net-mvc asp.net-mvc-routing multilingual