所以,我有两个网址,我需要不同的途径为:基于两个URL
/find-your-new-home/155-detroit/1234-some-value
和
/find-your-new-home/155-detroit/5555g-some-other-flipping-value
我有地方处理#1路线:
routes.MapRoute(
"FindYourNewHomeCommunity",
"find-your-new-home/{market}/{community}.html",
new { controller = "Community", action = "Detail" }
);
我有一个分割“155”,从“底特律”的“详细信息”方法的动作过滤器,也分裂“1234”,从“一些翻转的价值”的d只是将ID传递给action方法(id的都是重要的,文本值是无关紧要的)。
现在,第二条路线几乎完全相同,除了“5555”值之后有一个“g”。这个“g”表示它应该在社区控制器上调用另一个操作方法(“CommunityGroup”)。
我的问题是:我如何配置两条路线分别处理这些?我想:
routes.MapRoute(
"FindYourNewHomeCommunityGroup",
"find-your-new-home/{market}/{communityId}g-{community}.html",
new { controller = "Community", action = "CommunityGroup" }
);
这并不工作,但是,有两个原因:
1)这两个网址最后两条路线相匹配菲尔哈克的RouteDebugger作为证明。
2)由于贪婪匹配(这就是为什么我在示例URL中使用文本“翻转值”),communityId最终包含“5555-some-other-flippin”,因为它与最后一次匹配URL中的“g-”,恰好在“翻转值”文本中。
所以我的问题是,我如何获得不同的操作方法来触发这些URL?
编辑:只是为了澄清,这些URL是由我正在工作的一些其他约束和预先定义,无法更改。他们必须遵循这种格式。
你可以实现你自己的路由处理程序,避免贪婪的匹配。我没有代码示例,因为我只是离开办公室,但如果没有人回复,我会尽量在今晚掏出一些东西。 – Basic 2011-02-24 21:14:24