我可以在ASP.NET Web Api / MVC中路由可选和有条件强制参数的混合

时间:2013-06-19 09:20:42

标签: asp.net-mvc asp.net-mvc-4 asp.net-web-api asp.net-mvc-routing asp.net-web-api-routing

我猜测答案是制作多条路线,但我们的路线列表开始变长,所以我想看看能否更优雅,更简单地表达。 :)

在我当前的示例中,我想创建一个具有多个选项的路由,其中​​一些元素是可变的,而另一些元素则不是。

因此示例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。

1 个答案:

答案 0 :(得分:1)

是的,你可以在这里看到我的答案,以获得如何实现你想要的完整解释。

MVC 4.5 Web API Routing not working?