我希望有一条路线可以选择两个网址,但会映射到一个动作。一个很好的例子是多语言应用。让我们以英语和法语为例。
起初看起来很简单,从技术上讲,你可以做到:
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...
}
我不太确定从哪里开始,有什么想法?提示?
谢谢,
答案 0 :(得分:1)
这里有几个选项起点,大致是(按实现复杂度顺序):
routes.MapRoute(
"the hi route",
"{controllerName}/{actionName}/{id}",
new { controller = "Welcome" , action = "SayHi" , id = UrlParameter.Optional },
new { controllerName = @"welcome|bienvenu", actionName = @"sayhi|direallo" }
);
您可以创建一个基本控制器,它由每种语言的子类继承,并为每个基本控制器操作方法定义特定于语言的操作名称