我猜测答案是多条路线,但是我们的路线列表开始变长了,所以我想看看这是否可以更优雅、更简单地表达。:)
在我当前的示例中,我想创建一个具有多个选项的路线,其中一些元素是可变的,而另一些则不是。
因此,一个示例 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"
}
)
使用该路线,仅点击 /schedules/10 无法识别,并且 /schedules/10/instances 和 schedules/10/instances/5 都返回 schedules/10/instances 结果。
这是否可能以某种方式,或者我应该制作两条路线,一条用于/schedules/{id},一条用于/schedules/{id}/instances/{item}?
作为旁注,我正在开发一个 Web API 项目,但据我所知,这只是 MVC 解决方案的一个特定案例,所以我将两者标记为 MVC 和 Web API。