WebApi - UrlHelper.Route使用[FromUri]对象参数进行GET

时间:2016-03-31 14:36:16

标签: c# asp.net-web-api asp.net-web-api-routing

我的API操作定义如下:

 [Route(Name="GetMembersTest"), HttpGet, ResponseType(typeof(MemberHeadersDto))]
 public IHttpActionResult GetMembers[FromUri]MemberFilterDto filter, [FromUri]PagingOptionsDto paging)

此方法按预期工作,路由和所有请求正好流通。但是,我想提供一个" NextUri"用于分页,以便调用者可以继续跟随NextUri,直到它为null以获得所有结果。如果有意义的话,我必须向前发送一个uri到同一个动作,前面一页。

所以我尝试使用UrlHelper.Route。这条路线名为" GetMembers"就本例而言。

NextUri = Url.Route("GetMembers", new { filter, paging });

问题在于,而不是像

那样
/v1/members?filter.q=&filter.otherproperty=&paging.count=10&paging.startRow=11   

我得到了

/v1/members?filter=WebApi.Models.MemberFilterDto&paging=WebApi.Models.PagingOptionsDto

看起来UrlHelper.Route不支持GET请求的[FromUri]参数中的复杂类型。我能做些什么来获得这个功能吗?我现在的解决方法是将所有Dto属性作为单独的参数接收,然后在服务器上从它们构建我的Dtos。这不是理想的,因为如果我添加更多选项,我必须为操作添加更多参数,这也使路由值字典更加脆弱,因为它必须与方法签名匹配UrlHelper.Route(routeName,routeValues)。

1 个答案:

答案 0 :(得分:2)

不幸的是,没有办法将复杂对象传递给路由。相反,您需要单独传递简单属性。

我无法找到扩展Url.Route的方法,但这将是您最好的选择。