【问题标题】:Can I route a mix of optional and conditionally mandatory parameters in ASP.NET Web Api/MVC我可以在 ASP.NET Web Api/MVC 中路由可选参数和条件强制参数的组合吗
【发布时间】:2013-06-15 18:25:34
【问题描述】:

我猜答案是做多条路线,但是我们的路线列表开始变长了,所以我想看看这是否可以更优雅、更简单地表达出来。 :)

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

所以一个示例 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。

【问题讨论】:

  • 基本上,你不能让像“instances”这样的文字URI段是可选的,所以“schedules/10”与模式不匹配。你可以定义两个路由,或者试试属性路由库(attributerouting.net)。顺便说一句,属性路由正在添加到 Web API 的 v.Next 中。

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


【解决方案1】:

是的,您可以在此处查看我的答案,以获得有关如何实现您想要的目标的完整说明。

MVC 4.5 Web API Routing not working?

【讨论】:

    猜你喜欢
    • 2017-08-30
    • 2014-08-31
    • 2014-04-18
    • 2014-03-19
    • 2015-12-05
    • 1970-01-01
    • 2014-05-11
    • 1970-01-01
    • 2013-11-06
    相关资源
    最近更新 更多