我希望我的MVC网站能够路由以下网址:
http://www.example.com/ {用户id}
http://www.example.com/ {userId} / enroll
注意:userId
是一串字母,数字和/或连字符。
我意识到这是有问题的,因为URL没有指定控制器名称。但是,理论上应该是可能的。我可以在我的申请中use reflection to get a list of all the controllers。如果{userId}
与任何控制器都不匹配,则应将其重定向到特定的控制器/操作。
我的第一个问题是你如何指定这样的地图?我可以指定一个字符串值,我甚至可以指定一个正则表达式。但是如何根据它是否与字符串列表匹配来进行过滤?
除此之外,只是想知道是否有其他人想过做事,以及他们是否有任何其他有关如何实现它的创意。
答案 0 :(得分:3)
如果我理解你的问题:
routes.MapRoute(
name: "Default",
url: "{id}/{action}",
defaults: new { controller = "Custom", action = "Index" },
constraint: new { id = new MyRouteConstraint()});
在自定义MyRouteConstraint: IRouteConstraint
中,您可以将参数与字符串列表匹配