4

我正在为我的应用程序使用 Refit 库,我需要调用另一个服务。我需要获取所有带有我正在传递的 id 的实体。

我尝试了 [Body] 属性,它仍然不起作用。我设法传递了一个请求,但是如果另一个服务获取的 id 为空,而我肯定传递了现有的 IEnumerable,则列表。

我的 IRefitProxy:

[Get("/students/allByIds")]
Task<IEnumerable<Student>> GetStudentsById(IEnumerable<string> ids);

另一个服务的 API:

[RoutePrefix("api/students")]
[Route("allByIds")]
[HttpGet]
public IEnumerable<Student> AllByIds(IEnumerable<string> ids)
{
//ids here is null!

//call my repository blablabla
return students;
}

我传递了一个字符串数组/列表,它为空。路径没问题,因为我设法陷入带有断点的方法。我怎样才能正确地通过它?

4

2 回答 2

7

我设法解决了这个问题。添加[Query(CollectionFormat.Multi)]解决了这个问题。

[Get("/students/allByIds")] Task<IEnumerable<Student>>GetStudentsById([Query(CollectionFormat.Multi)]IEnumerable<string> ids);

接收 API 需要有[FromUri]属性。希望它可以帮助某人!

于 2019-07-09T14:11:15.857 回答
1

不确定您如何调用 API 的端点。但是您是否尝试过在方法的参数中使用 FromUri 属性?

[Get("/students/allByIds")]
Task<IEnumerable<Student>> GetStudentsById([FromUri] IEnumerable<string> ids);

然后,您应该可以像这样调用:

?ids=11&ids=12&ids=13

甚至可以通过 JavaScript 传递一个字符串数组。

于 2019-07-08T16:10:16.023 回答