使用MVC设计URL

时间:2013-03-11 14:49:49

标签: asp.net-mvc routes asp.net-mvc-routing

说我有一个我想要显示的订单列表。我想让用户能够显示所有订单,来自特定州的所有订单以及来自特定类别的所有订单。其中每个都可以按日期范围进行过滤。

不用担心路由,我可能只是在查询字符串上添加每个:

/orders?State=TX&Category=Books&DateRange=Yesterday

虽然我可以轻松地完成这项工作,但它并没有“感觉”这是正确的MVC做事方式。

我的路线看起来像这样:

/orders/              
/orders/state/{state}
/orders/category/{category}
/orders/state/{state}/category/{category}/
/orders/state/{state}/category/{category}/Date/{date-range}

但我仍然希望支持那些不存在的过滤器。有没有更好的方法处理这个或我只是在思考整个事情?

如果我只使用URL路径,我不知道如何创建这些路由而不是仅仅为我想要的所有组合重复它们(状态,没有类别,日期,状态,没有类别,没有日期,没有州,类别,日期等。)

2 个答案:

答案 0 :(得分:1)

我认为查询参数版本适用于MVC。您可能会感到困惑的是,当您想要为用户提供特定订单的页面时,您会将order_id放在页面中。那么在传统网站中,您只需创建该网址

/order.html?order_id=1234

(或其他),使用MVC

/orders/1234

代替。不同的是,你只想在URL中放置必要的参数---那些页面会破坏的参数---不是每个参数。如果没有订单ID,您将无法返回订单页面,因此该页面将包含在URL中。

你可以在一个页面上同时拥有两个;举个简单的例子,如果你有订单的送货跟踪页面,你可以有一个像

这样的网址
/orders/1234/tracking?since=9%3a00

仅显示自上午9:00以来的跟踪事件(到达,离开)。

答案 1 :(得分:0)

将搜索/过滤器选项留在查询参数中通常是一种常见的做法,例如在google上查看 从我的角度来看,除非你关心过滤结果的seo或想要为这个页面提供人性化的网址,否则支持任何可能过滤器的路径都没有意义。