WebApi - UrlHelper.Route 使用 [FromUri] 对象参数获取
WebApi - UrlHelper.Route to GET with [FromUri] object parameter
我有一个 API 动作定义如下:
[Route(Name="GetMembersTest"), HttpGet, ResponseType(typeof(MemberHeadersDto))]
public IHttpActionResult GetMembers[FromUri]MemberFilterDto filter, [FromUri]PagingOptionsDto paging)
此方法按预期工作,路由和所有请求都正常通过。但是,我想提供一个 "NextUri" 用于分页,以便调用者可以继续关注 NextUri 直到它为 null 以获取所有结果。如果有意义的话,我必须将 uri 发送回相同的操作,提前 1 页。
所以我尝试使用 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 属性作为单独的参数,然后在服务器上根据它们构建我的 Dto。这并不理想,因为如果我添加任何更多选项,我必须向操作添加更多参数,这也使路由值字典更加脆弱,因为它必须与 [=29= 中的方法签名匹配](routeName,routeValues).
遗憾的是,无法将复杂对象传递给路由。相反,您需要单独传入简单属性。
我无法找到扩展 Url.Route
的方法,但这 be/have 是您的最佳选择。
我有一个 API 动作定义如下:
[Route(Name="GetMembersTest"), HttpGet, ResponseType(typeof(MemberHeadersDto))]
public IHttpActionResult GetMembers[FromUri]MemberFilterDto filter, [FromUri]PagingOptionsDto paging)
此方法按预期工作,路由和所有请求都正常通过。但是,我想提供一个 "NextUri" 用于分页,以便调用者可以继续关注 NextUri 直到它为 null 以获取所有结果。如果有意义的话,我必须将 uri 发送回相同的操作,提前 1 页。
所以我尝试使用 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 属性作为单独的参数,然后在服务器上根据它们构建我的 Dto。这并不理想,因为如果我添加任何更多选项,我必须向操作添加更多参数,这也使路由值字典更加脆弱,因为它必须与 [=29= 中的方法签名匹配](routeName,routeValues).
遗憾的是,无法将复杂对象传递给路由。相反,您需要单独传入简单属性。
我无法找到扩展 Url.Route
的方法,但这 be/have 是您的最佳选择。