我希望用户能够使用“/ 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。
任何指针?我可以使用某种约束来实现这一目标吗?谢谢!
答案 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
);