任何方式来创建一个捕获所有路由

时间:2009-11-19 20:33:20

标签: c# asp.net asp.net-mvc

我在控制器上有很多动作

Controller1\Action1
Controller1\Action2
Controller1\Action3
Controller1\Action4
Controller1\Action5
Controller1\Action6

我希望我的网址永远只是:

Action1
Action2
Action3
Action4
Action5
Action6

有一种简单的方法吗?我不会在以下地方发生任何冲突:

Controller1\Action1
Controller2\Action1

每个动作都有一个唯一的名称。

1 个答案:

答案 0 :(得分:2)

你应该可以这样做:

routes.MapRoute(
    "CatchAll",
    "{action}/{*path}",
    new { controller = "MyController", action = "Index" }
);

基本上你告诉它所有请求都应该将路径视为Action,它们都应该转到“MyController”。如果Url中未提供Action,则action =“Index”将作为默认值。

即使在操作名称后附加了额外的无效路径数据,上述路径定义也会评估为true。这意味着/Action1/Action1/251958125ad/2512qsadfa2都会转到Action1()。如果您希望只允许确切的路径:

routes.MapRoute(
    "CatchAll",
    "{action}",
    new { controller = "MyController", action = "Index" }
);