Метод API HttpGet с более чем одним параметром - PullRequest
0 голосов
/ 29 апреля 2020

Мне нужно создать метод HttpGet с двумя параметрами List, но я получаю эту ошибку:

имеет более одного параметра, который был указан или выведен как связанный с телом запроса. Только один параметр на действие может быть связан с телом. Проверьте следующие параметры и используйте «FromQueryAttribute» для указания границы из запроса, «FromRouteAttribute» для указания границы из маршрута и «FromBodyAttribute» для параметров, которые должны быть связаны с телом:

MyObject имеет два свойства:

public class MyObject
{
    public int Prop1 { get; set; }
    public int Prop2 { get; set; }
}

Вещи, которые я пробовал, выдают исключение выше

Метод 1

[HttpGet]
public IActionResult Get(List<MyObject> obj1, List<MyObject> obj2)

Метод 2

[HttpGet]
[Route("{obj1}/{obj2")]
public IActionResult Get(List<MyObject> obj1, List<MyObject> obj2)

Метод 3

[HttpGet("{obj1}/{obj2")]
public IActionResult Get(List<MyObject> obj1, List<MyObject> obj2)

Использование FromQueryAttribute

Я пытался используя:

[HttpGet]
public IActionResult Get([FromQueryAttribute] List<MyObject> obj1, [FromQueryAttribute] List<MyObject> obj2)

И это не вызывает исключения, но я не знаю, как передать эти параметры через атрибут запроса?

Заранее спасибо

пс Я нашел Как передать несколько параметров в метод get в ASP. NET Core и Передать список сложных объектов в строке запроса в потоки WEB API , но не смог помоги мне.

1 Ответ

0 голосов
/ 29 апреля 2020

Это кажется немного странным способом передачи этих данных (почему бы не один длинный список всех объектов одного типа?). Сказав это, вы сначала должны исправить свой атрибут. Атрибут «[FromQuery]» из класса «FromQueryAttribute». Вы не включаете часть «Атрибут» в фактическое использование атрибутов.

Итак, контроллер:

[HttpGet]
public IActionResult Get([FromQuery] List<MyObject> obj1, [FromQuery] List<MyObject> obj2) {}

Затем вам нужно сформировать параметры строки запроса, чтобы они действительно соответствовали эта структура. Строка запроса будет выглядеть примерно так:

https://localhost:44315/api/test?obj1[0].Prop1=1&obj1[0].Prop2=2&obj2[0].Prop1=3&obj2[0].Prop2=4

Это приведет к созданию объекта параметра obj1 в методе Get с одним элементом в списке, и этот первый элемент (нулевой индекс) имеет значение Prop1, равное 1, и значение a Значение Prop2, равное 2. Также будет создан элемент obj2, один элемент в списке, значение Prop1, равное 3, и значение Prop2, равное 4.

Если вы хотите, чтобы obj1 имел второй элемент в списке, то индекс становится равным 1, и вы добавляете это в строку запроса:

...&obj1[1].Prop1=5&obj1[1].Prop2=6

Я проверил это на ASP. Net CORE 3.1 API, и он работал нормально.

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