Как передать таблицу объектов с помощью строки запроса? - PullRequest
0 голосов
/ 03 августа 2020

Мне нужно поделиться некоторой информацией о доставке в моем проекте. NET Core 3.1 API. Я разработал конечную точку, которая возвращает набор объектов, удовлетворяющих предоставленным условиям фильтрации, содержащимся в объекте SearchResultsDto. Принцип работы фильтрующего механизма прост. На стороне клиента пользователь выбирает свойство и предоставляет для него некоторое значение. Пользователь может захотеть отфильтровать таблицу, используя одно, два или даже несколько свойств. Итак, мой метод контроллера должен принимать в качестве параметра набор фильтров (парное значение свойства-фильтра). Вот мой метод и определение класса фильтра:

        [HttpGet]
        public async Task<ActionResult<SearchResultsDto>> GetShipmentAsync([FromQuery] ICollection<Filter> filters,
            [FromQuery] int page,
            [FromQuery] int pageCapacity,
            [FromQuery] DateTime dateTimeInfimum,
            [FromQuery] DateTime dateTimeSupremum,
            [FromQuery] bool withPodOnly) =>
                Ok(await QueryBus
                    .SendAsync<GetShipmentQuery, SearchResultsDto>(new GetShipmentQuery
                        {
                            Page = page,
                            PageCapacity = pageCapacity,
                            DateTimeInfimum = dateTimeInfimum,
                            DateTimeSupremum = dateTimeSupremum,
                            WithPodOnly = withPodOnly,
                            Filters = filters
                        }));

       public class Filter
       {
            public string PropertyName { get; set; }
            public string FilterValue { get; set; }
       }

Как правильно передать массив объектов фильтра, используя строку запроса? Хорошо ли использовать строку запроса для такого поведения? Если нет, как мне разработать свою конечную точку? Как правильно сериализовать объекты JavaScript и отправить их с помощью ax ios, используя метод GET?

Я уже пробовал что-то вроде этого:

https://localhost:44348/api/shipment?filters=[propertyName=materialReleaseReceipt&filterValue=WZ]&page=1&pageCapacity=4&dateTimeInfimum=2012-04-23T18:25:43.511Z&dateTimeSupremum=2012-04-23T18:25:43.511Z&withPodOnly=true

Но не работает. Коллекция фильтров анализируется неправильно.

Ответы [ 2 ]

1 голос
/ 03 августа 2020

Если вы хотите передать данные через строку запроса, вы можете передать их, как показано ниже,

https://localhost:44385/weatherforecast?filters[0].Id=1&filters[1].Id=2

введите описание изображения здесь

0 голосов
/ 04 августа 2020

Просто напишите строку запроса, как показано ниже:

https://localhost:44348/api/shipment?[0].propertyName=materialReleaseReceipt&[0].filterValue=WZ&page=1&pageCapacity=4&dateTimeInfimum=2012-04-23T18:25:43.511Z&dateTimeSupremum=2012-04-23T18:25:43.511Z&withPodOnly=true

Для получения более подробной информации о привязке модели вы можете обратиться к do c

...