【发布时间】:2011-11-15 18:53:17
【问题描述】:
我需要以下路线:
example.com/products
转到产品类别页面(例如汽车、卡车、公共汽车、自行车)
控制器=Products,动作=Categories()
example.com/products?a=1&b=2
转到特定类别中所有产品的索引(例如福特、本田、雪佛兰)
控制器=Products,动作=Index(string a, string b)
路由仅在查询字符串上有所不同,并且 MVC 似乎忽略了“?”之后的任何内容。所以当然只有一条规则会受到打击——第一条。
如何区分两者?
编辑: 换一种说法,我想要两条路线。是否可以在路由中使用查询字符串或者 MVC 是否真的忽略它?有没有办法破解它,或者使用某种自定义路由方案,就像我可以进行自定义绑定和自定义验证一样?
【问题讨论】:
-
对于这样的 URL,您不需要 - 如果设置了 a & b,您可以返回正确的视图,如果没有设置,则返回索引。为什么不像这样区分 URL:
example.com/productsexample.com/products/a/b换句话说,为什么您希望a和b成为查询参数而不是 URL 的一部分?如果将它们作为 URL 的一部分,则路由很简单:将复杂的路由(首先需要a和b)和不太复杂的路由放在第二位。 -
谢谢,但这不是我们正在做的事情,因为您正在对作为资源的路线本身的瞬态数据进行编码;这就是适当格式化数据的查询字符串的目的。就您的第一个建议而言,是的,我们可以将所有内容都放在一个操作方法中,并在其中决定要返回的视图 - 但是我正在做我自己的路由,这看起来很愚蠢,我希望框架能够做到这一点我。
-
stackoverflow上有更多关于这个的讨论。这可能是合适的:stackoverflow.com/questions/968904/…
标签: asp.net-mvc asp.net-mvc-3 query-string asp.net-mvc-routing