MVC 路由有冲突
MVC routes are in conflict
我的 ASP.NET MVC 应用程序中需要有 2 条路由,但我很难尝试以一种不会相互窃取的方式定义路由。
- 我需要处理像
这样的url
www.website.com/Home/About
www.website.com/Home/Contact
- 我也需要这样url
www.website.com/23a244x3/Products/2
www.website.com/434e5s344/Services/1
www.website.com/f2432g423/Profile
所以我需要2条路线。
#1 中的 url 被默认路由成功处理,即
routes.MapRoute(
name: "Default",
url: "{controller}/{action}/{id}",
defaults: new { controller = "Home", action = "Index", id = UrlParameter.Optional }
);
为了处理#2 中的 urls,我定义了以下路由
routes.MapRoute(
name: "PagesRoute",
url: "{uniqueID}/{action}/{pagecount}",
defaults: new { controller = "Pages", pagecount = UrlParameter.Optional }
);
不幸的是,现在路由 #2(又名 PagesRoute)也在处理来自 #1 的 url,例如 www.website.com/Home/About。我还在 IIS 中设置了 url 重写规则,将所有 url 变成小写,以用于 SEO 目的,因此 /Home 重定向到 /home 等
如何区分这两条路线? #2 中的路线似乎很贪心..
您将不得不不提供控制器,并为每个控制器提供路由:
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+" }
);
我的 ASP.NET MVC 应用程序中需要有 2 条路由,但我很难尝试以一种不会相互窃取的方式定义路由。
- 我需要处理像 这样的url
www.website.com/Home/About
www.website.com/Home/Contact
- 我也需要这样url
www.website.com/23a244x3/Products/2
www.website.com/434e5s344/Services/1
www.website.com/f2432g423/Profile
所以我需要2条路线。
#1 中的 url 被默认路由成功处理,即
routes.MapRoute(
name: "Default",
url: "{controller}/{action}/{id}",
defaults: new { controller = "Home", action = "Index", id = UrlParameter.Optional }
);
为了处理#2 中的 urls,我定义了以下路由
routes.MapRoute(
name: "PagesRoute",
url: "{uniqueID}/{action}/{pagecount}",
defaults: new { controller = "Pages", pagecount = UrlParameter.Optional }
);
不幸的是,现在路由 #2(又名 PagesRoute)也在处理来自 #1 的 url,例如 www.website.com/Home/About。我还在 IIS 中设置了 url 重写规则,将所有 url 变成小写,以用于 SEO 目的,因此 /Home 重定向到 /home 等
如何区分这两条路线? #2 中的路线似乎很贪心..
您将不得不不提供控制器,并为每个控制器提供路由:
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+" }
);