我正在为我的应用程序使用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;
}
我传递了一个数组/字符串列表,它为空。路径尚可,因为我设法陷入断点的方法中。如何设法正确通过它?
答案 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]
属性。希望它能对某人有所帮助!