首页 > 解决方案 > 如何使用查询字符串传递对象表?

问题描述

我需要在我的 .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; }
       }

如何使用查询字符串正确传递过滤器对象数组?将查询字符串用于这种行为是一种好方法吗?如果没有,我应该如何设计我的端点?如何使用 GET 方法以适当的方式序列化 JavaScript 对象,并使用 axios 发送它?

我已经尝试过这样的事情:

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

但它不起作用。过滤器集合未正确解析。

标签: javascriptc#asp.net-core.net-coreaxios

解决方案


如果你想通过查询字符串传递数据,你可以像下面这样传递它,

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

在此处输入图像描述


推荐阅读