【发布时间】:2009-10-20 06:17:15
【问题描述】:
给定一个遵循以下模式的 url:
firstcolor={value1}/secondcolor={value2}
其中 value1 和 value2 可以变化,动作方法如下:
ProcessColors(string color1, string color2) 在说一个叫做 ColorController 的控制器。
我想要以下路线评估:
URL '/firstcolor=red' 会导致类似 ProcessColors("red", null)
URL '/secondcolor=blue' 会导致类似 ProcessColors(null, "blue")
的调用
URL 'firstcolor=red/secondcolor=blue' 以 ProcessColors("red", "blue") 之类的调用结束
现在我认为这可以通过几条路线来实现,就像这样
route.MapRoute(null,
"firstcolor={color1}/secondcolor={color2}",
new { controller=ColorController, action = ProcessColors })
route.MapRoute(null,
"firstcolor={color1}}",
new { controller=ColorController, action = ProcessColors, color2 = (string)null })
route.MapRoute(null,
"secondcolor={color2}}",
new { controller=ColorController, action = ProcessColors, color1 = (string)null })
这对于仅 2 种颜色就足够了,但据我所知,如果我们想要拥有 4 种颜色并能够拥有这样的 URL,我们最终会得到大量路由:
'/firstcolor=blue/secondcolor=red/thirdcolor=green/fourthcolor=black'
'/第一种颜色=蓝色/第三种颜色=红色'
'/thirdcolour=red/fourthcolour=black'
等等,即我们需要满足任何组合,因为 firstcolor 总是在 2nd 之前,2nd 总是在 3rd 之前等等。
忽略我这个荒谬的例子,有没有什么好的方法来处理这种不需要创建大量路由和操作方法的情况?
【问题讨论】:
-
不要这样做。 = 符号是根据 URI RFC (ietf.org/rfc/rfc3986.txt) 保留的,除非经过编码,否则不应成为查询之外的合法 URI 的一部分。正如çağdaş所说,使用查询,而不是路径。
标签: asp.net-mvc asp.net-mvc-routing