ASP.NET MVC路由:使用查询字符串进行一个操作,而不是另一个操作

时间:2011-09-13 01:26:22

标签: asp.net-mvc asp.net-mvc-3 query-string asp.net-mvc-routing

我需要以下路线:

example.com/products
转到产品类别页面(例如汽车,卡车,公共汽车,自行车)
controller = Products,action = Categories()

example.com/products?a=1&b=2
转到特定类别中所有产品的索引(例如福特,本田,雪佛兰)
controller = Products,action = Index(string a, string b)

路由仅在查询字符串上有所不同,似乎MVC在“?”之后忽略了任何内容。所以当然只有一条规则会被击中 - 第一条规则。

我如何区分这两者?

编辑:另有说​​明,我想要两条路线。是否可以在路由中使用查询字符串或MVC是否真的忽略它?有没有办法破解它,或者使用某种自定义路由方案,就像我可以进行自定义绑定和自定义验证一样?

1 个答案:

答案 0 :(得分:1)

介绍参数。 ASP.NET MVC允许您创建“漂亮”的URL,这正是您应该在此处执行的操作:

首先,路线映射:

routes.MapRoute(
    "SpecificProducts",
    "products/{a}/{b}",
    new { controller = "products", action = "Categories" }
    );

routes.MapRoute(
    "ProductsIndex",
    "products".
    new { controller = "products", action = "Index" }
    );

然后,控制器动作

public ActionResult Index()
{
}

public ActionResult Categories(string a, string b) //parameters must match route values
{
}

这将允许您使用搜索友好的URL,而您不必担心查询字符串参数。