我需要在我的ASP.NET MVC应用程序中使用2条路径,并且我很难尝试以不会彼此窃取的方式定义路由。
www.website.com/Home/About
www.website.com/Home/Contact
www.website.com/23a244x3/Products/2
www.website.com/434e5s344/Services/1
www.website.com/f2432g423/Profile
所以我需要2条路线。
#1中的网址由默认路由成功处理,即
routes.MapRoute(
name: "Default",
url: "{controller}/{action}/{id}",
defaults: new { controller = "Home", action = "Index", id = UrlParameter.Optional }
);
为了处理#2中的网址,我定义了以下路由
routes.MapRoute(
name: "PagesRoute",
url: "{uniqueID}/{action}/{pagecount}",
defaults: new { controller = "Pages", pagecount = UrlParameter.Optional }
);
不幸的是,现在路线#2(又名PagesRoute)也在处理来自#1的网址,例如www.website.com/Home/About。我还在IIS中设置了url重写规则,将所有url转换为小写,用于SEO目的,因此/ Home重定向到/ home等。
我如何区分这两条路线? #2中的路线似乎很贪婪..
答案 0 :(得分:1)
您必须不提供控制器,并为每个控制器提供路由:
routes.MapRoute(
name: "Default",
url: "Home/{action}/{id}",
defaults: new { controller = "Home", action = "Index", id = UrlParameter.Optional }
);
解析器{uniqueID}
和{controller}
基本相同。 Url中的任何字符串都将匹配两个路由,因此您需要一些区分2。
您还可以查看Route Constraints:
routes.MapRoute(
"PagesRoute",
"{uniqueID}/{action}/{pagecount}",
new { controller = "Pages", pagecount = UrlParameter.Optional },
new { uniqueID = @"\d+" }
);