【发布时间】:2010-12-29 13:48:11
【问题描述】:
我正在开发旧版 ASP.NET 系统。我说遗留是因为大约 90% 的系统没有测试。我正在尝试修复此项目中的路线,但遇到了我希望使用通用路线解决的问题。
我有以下路线:
routes.MapRoute(
"DefaultWithPdn",
"{controller}/{action}/{pdn}",
new { controller = "", action = "Index", pdn = "" },
null
);
routes.MapRoute(
"DefaultWithClientId",
"{controller}/{action}/{clientId}",
new { controller = "", action = "index", clientid = "" },
null
);
问题是第一条路线正在捕获我需要路由到第二条路线的所有流量。路由是通用的(在任一路由定义的约束中都没有定义控制器),因为整个应用程序中的多个控制器共享相同的前提(有时我们需要一个“pdn”,有时我们需要一个“clientId”)。
如何映射这些通用路由,以便它们进入正确的控制器和操作,但又不会过于贪婪?或者我可以吗?这些路线是否过于通用(这是我开始相信的情况)。
此时我唯一的选择(AFAIK)是以下之一:
在约束中,应用正则表达式来匹配操作值,例如:(foo|bar|biz|bang) 和控制器相同:每个控制器的 (home|customer|products)。但是,这有一个问题,我可能需要这样做:
~/Foo/Home/123 // 应该映射到“DefaultwithPdn”
~/Foo/Home/abc // 应该映射到“DefaultWithClientId”
这意味着,如果 Foo 控制器有一个采用 pdn 的操作和另一个采用 clientId 的操作(在此应用中一直发生),则选择了错误的路由。
将这些约束硬编码到每个可能的控制器/动作组合中对我来说似乎有很多重复,我觉得我已经研究这个问题太久了,所以我需要另一双眼睛来帮忙。
我可以使用通用路由来处理这种情况吗?或者我是否需要为每个控制器设置自定义路由,并将约束应用于这些路由上的操作?
谢谢
【问题讨论】:
-
看起来我必须完全重新配置客户端路由才能尝试使其正常工作。感谢大家的提示。
标签: asp.net-mvc routes asp.net-mvc-routing