Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/291.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# WebApi-UrlHelper.Route使用[FromUri]对象参数获取_C#_Asp.net Web Api_Asp.net Web Api Routing - Fatal编程技术网

C# WebApi-UrlHelper.Route使用[FromUri]对象参数获取

C# WebApi-UrlHelper.Route使用[FromUri]对象参数获取,c#,asp.net-web-api,asp.net-web-api-routing,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”,这

我的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。这并不理想,因为如果我再添加任何选项,我就必须向操作添加更多参数,这也使得路由值字典更加脆弱,因为它必须与UrlHelper.route(routeName,routeValues)中的方法签名相匹配。

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


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

虽然这不是您问题的直接答案,但您是否考虑过使用属性路由?它通常非常适合WebApi。我们正在使用属性路由。更新原始问题以反映它。谢谢。在读了你的回复后,我自己也探讨了这个想法,对于任何想走这条路的人,我都会避开。没有将代码注入进程的好方法。最后不得不用一系列正则表达式修复URI字符串……即使这样,它也不是很正确,因为ModelBinder不支持具有不同名称的[DataContract]/[DataMember]属性。真是一团糟。谢谢你的回复。为了澄清,我最终选择了action方法中的各个参数。