我的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)。
答案 0 :(得分:2)
不幸的是,没有办法将复杂对象传递给路由。相反,您需要单独传递简单属性。
我无法找到扩展Url.Route
的方法,但这将是您最好的选择。