【发布时间】:2020-11-23 17:06:54
【问题描述】:
我需要在我的 .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 对象,并使用 axios 以适当的方式使用 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
但它不起作用。过滤器集合未正确解析。
【问题讨论】:
-
这完全取决于您,尽管我可能会添加“不是您目前的操作方式”。顺便说一句,GET 请求可以有一个主体,将其作为 JSON 块发送可能是最干净的
-
我建议您将端点更改为
HttpPost并解析过滤器集合[FromBody],同时继续从查询字符串中读取其他参数。由于 GET 请求可以被浏览器缓存,并且将正文作为 GET 请求的一部分发送可能会导致问题 -
请详细说明这些“问题”
-
嗨@Bulchsu,我的回答对您解决问题有帮助吗?
标签: javascript c# asp.net-core .net-core axios