我想有一条路线可以给出两个URL的选项,但映射到一个动作。多语言应用就是一个很好的例子。以英语和法语为例。MVC路由:如何将两个名称映射到一个动作
这似乎在第一个简单的,在技术上你可以这样做:
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...
}
我不太知道从哪里开始,任何想法?提示?
谢谢
可能重复http://stackoverflow.com/questions/2146227/how-to-route-a-multiple-language-url-with- a-mvc – 2012-02-24 15:23:19
其相当不错,但我是窝确定是否有某种方法可以避免在控制器之外建立字典。 – 2012-02-24 21:08:20
在我看来,这是一个配置项目,无论如何都应该在控制器之外。但是,这只是我的两美分 – 2012-02-24 21:12:26