Как я могу передать список строк в запросе? - PullRequest
0 голосов
/ 08 июля 2019

Я использую библиотеку Refit для своего приложения, и мне нужно позвонить в другую службу. Мне нужно получить все сущности с идентификаторами, которые я передаю.

Я попробовал атрибут [Body], но он все еще не работает. Мне удается передать запрос, но список идентификаторов, которые получает другая служба, является нулевым, в то время как я определенно передаю существующий 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;
}

Я передаю массив / список строк, и он равен нулю. Путь в порядке, потому что мне удается попасть в метод с точкой останова. Как мне правильно пройти его?

Ответы [ 2 ]

1 голос
/ 08 июля 2019

Не уверен, как вы вызываете конечную точку вашего API.Но пытались ли вы использовать атрибут FromUri в параметрах вашего метода?

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

После этого вы сможете сделать вызов так:

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

Или даже передать массив строк черезJavaScript.

0 голосов
/ 09 июля 2019

Мне удалось решить этот вопрос. Добавление [Query(CollectionFormat.Multi)] решило проблему.

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

Получающий API должен иметь атрибут [FromUri]. Надеюсь, это кому-нибудь поможет!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...