如何在请求中传递字符串列表?

时间:2019-07-08 15:48:47

标签: c# rest api refit

我正在为我的应用程序使用Refit库,我需要拨打另一个服务的电话。我需要获取所有我要传递的ID的实体。

我尝试了[Body]属性,但仍然无法使用。我设法传递一个请求,但是当我肯定传递现有的IEnumerable时,如果另一个服务获得的id的列表为null。

我的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;
}

我传递了一个数组/字符串列表,它为空。路径尚可,因为我设法陷入断点的方法中。如何设法正确通过它?

2 个答案:

答案 0 :(得分:1)

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

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

您应该可以像这样拨打电话:

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

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

答案 1 :(得分:0)

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

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

接收方的API必须具有[FromUri]属性。希望它能对某人有所帮助!