我猜测答案是制作多条路线,但我们的路线列表开始变长,所以我想看看能否更优雅,更简单地表达。 :)
在我当前的示例中,我想创建一个具有多个选项的路由,其中一些元素是可变的,而另一些元素则不是。
因此示例URI将是:
http://localhost/api/schedules/10/instances/5
匹配的路线定义是:
api/schedules/{id}/instances/{item}
可能的端点是:
http://localhost/api/schedules/10 // returns schedule number 10
http://localhost/api/schedules/10/instances // returns all instances in schedule 10
http://localhost/api/schedules/10/instances/5 // returns 5th instance in schedule 10
似乎导致麻烦的是希望在两个可选参数之间使用固定关键字。我尝试了以下定义(和几个变体):
RouteTable.Routes.MapHttpRoute(
"RouteName",
"api/schedules/{id}/instances/{item}",
new {
id = RouteParameter.Optional,
instances = RouteParameter.Optional,
item = RouteParameter.Optional,
controller = "SomeController"
}
)
使用该路由时,无法识别/ schedule / 10,并且/ schedules / 10 / instances和schedules / 10 / instances / 5都返回schedule / 10 / instances结果。
这在某种程度上是否可行,或者我应该制作两条路线,一条用于/ schedules / {id},另一条用于/ schedules / {id} / instances / {item}?
作为旁注,我正在开发一个Web API项目,但据我所知,这只是MVC解决方案的一个特例,所以我将它们标记为MVC和Web API。