Asp.net mvc路由没有控制器或动作名称

时间:2014-09-24 05:33:11

标签: asp.net-mvc asp.net-mvc-5 asp.net-mvc-routing

我正在尝试将所有与现有控制器不匹配的网址重定向到某个控制器。

例如,网址mywebsite.com/newyork应该作为mywebsite.com/Cities/Info/newyork处理

我在RegisterRoutes中使用以下代码,但它似乎无法正常工作,因为我得到了404响应:

        routes.MapRoute(
            name: "Default",
            url: "{controller}/{action}/{id}",
            defaults: new { controller = "Home", action = "Index", id = UrlParameter.Optional }
        );
        routes.MapRoute(
            name: "Cities",
            url: "{cityname}",
            defaults: new { controller = "Cities", action = "Info", cityname= "" }
        );

1 个答案:

答案 0 :(得分:19)

您应首先将城市路线放入并删除空的默认参数:

    routes.MapRoute(
        name: "Cities",
        url: "{cityname}",
        defaults: new { controller = "Cities", action = "Info" }
    );
    routes.MapRoute(
        name: "Default",
        url: "{controller}/{action}/{id}",
        defaults: new { controller = "Home", action = "Index", id = UrlParameter.Optional }
    );

路线按顺序处理,因此您应该具有最具体的第一个到最不具体的(您的默认路线)。

当您的website.com/newyork与默认路线匹配时,它不会继续您的城市路线。