每个控制器的ASP MVC 4默认操作

时间:2015-11-25 15:55:53

标签: asp.net-mvc asp.net-mvc-4 routing http-status-code-404

我想将用户重定向到每个控制器的默认操作。

假设我有: Controller1 Controller2 ,... 每个都有一些有效的操作: Action1 Action2 ,.... 所以有效的URL看起来像这样:

域/控制器1 /

域/控制器1 /动作1 /

域/控制器1/1动作/

域/控制器2 /动作1 /

等等。

现在,如果我输入: domain / controller1 / {any string} ,我会收到404错误。 我想将用户重定向到 domain / controller1 / action1 ,只要他们输入 domain / controller1 / {any string} 甚至 domain / controller1 / {string1} / {string2} .... 并且在其他情况下(当控制器不匹配时)保持404错误。

2 个答案:

答案 0 :(得分:2)

我相信在您的路线配置文件下,您可以添加一条新路线。

routes.MapRoute(
        name: "Default",
        url: "controller1/{action}/",
        defaults: new {  action = "Index" }
    );

很抱歉,如果语法错误。

答案 1 :(得分:0)

您正在查看的地图路线有点棘手。如果我们采用简单的映射路由“domain / controller1 / {any string}”,这可以很容易地映射到包括有效操作的任何url(anystring可能是action2对吗?)。因此,为了使映射选择正确的操作,您必须为每个有效操作创建特定的映射路由,并添加一个通用的映射路由,将所有其他URL重定向到“action1”,如下面的代码。

            routes.MapRoute(name: "map1", url: "controller1/action1", defaults: new
            {
                action = "action1",
                controller = "controller1"
            });

            routes.MapRoute(name: "map2", url: "controller1/action2", defaults: new
            {
                action = "action2",
                controller = "controller1"
            });

            routes.MapRoute(name: "map3", url: "controller1/{anystring}", defaults: new
            {
                action = "action1",
                controller = "controller1",
                anystring = UrlParameter.Optional
            });

这是我能想到的最佳方式......