MVC:1个控制器的多个路由

时间:2013-12-17 00:01:09

标签: asp.net-mvc url-routing

我希望用户能够使用“/ Linecard”或“/ Manufacturers”作为URL访问我的ASP.Net MVC网站的“/ Linecard”页面...所以相同的控制器,2个不同的可能URL。 / p>

我尝试添加以下内容:

    routes.MapRoute(
        name: "Manufacturers",
        url: "Manufacturers/{action}/{id}",
        defaults: new { controller = "Linecard", action = "Index", id = UrlParameter.Optional }
    );

在“默认”路线之后添加此功能根本不起作用,当我转到“/制造商”时,我收到404错误。把它放在“默认”之前有效,但是当我点击菜单链接时,只有“/制造商”出现在URL中,因为它是第一个匹配。我希望“/ Linecard”始终显示为URL。

任何指针?我可以使用某种约束来实现这一目标吗?谢谢!

2 个答案:

答案 0 :(得分:3)

当我们转移到无扩展名网址时,我遇到了同样的问题。我们需要继续支持一条带扩展的路线。我通过将默认路由应用于除旧URL之外的所有内容来解决这个问题,然后将该映射专门用于异常

routes.MapRoute(
    "Default", // Route name
    "{controller}/{action}/{id}", // URL with parameters
    new { controller = "Home", action = "Index", id = UrlParameter.Optional },
    // if controller specified does not match 'manufacturers' (case insensitive)
    new { controller = "^((?i)(?!manufacturers).)*$" },
    new string[] { "Namespace.Of.Controllers" }
);  

routes.MapRoute(
    "Manufacturers", // Route name
    "Manufacturers/{action}/{id}", // URL with parameters
    new { controller = "Linecard", action = "Index", id = UrlParameter.Optional },
    new string[] { "Namespace.Of.Controllers" }
);

答案 1 :(得分:0)

您也可以在路线映射时使用默认值设置顺序,如此

routes.MapRoute(
    name: "Manufacturers",
    url: "Manufacturers/{action}/{id}",
    defaults: new { controller = "Linecard", action = "Index", id = UrlParameter.Optional }
);

routes.MapRoute(
    "Default", // Route name
    "{controller}/{action}/{id}", // URL with parameters
    new { controller = "Home", action = "Index", id = UrlParameter.Optional } // Parameter defaults
);
相关问题