我有一个用.NET Core2.1编写的Web项目。我正在尝试创建一个操作,它可以将一个十进制值数组作为参数。
如果我将参数数据类型定义为string[]或int[],那么当我调用操作时,传入逗号分隔的字符串时,Web可以将其解析为字符串数组或into数组。
但是,如果我将参数的数据类型更改为decimal[],并使用相同的逗号分隔字符串再次调用它,Web将这些逗号去掉,并将值连接在一起形成一个大的十进制。
如果参数定义为int[],而不是decimal[],为什么要正确拆分逗号分隔的字符串?
示例:
我的行动是:
[HttpGet("details/{shipmentDetailIds}")]
public async Task<List<ShipmentDetail>> GetByShipmentDetailIds(decimal[] shipmentDetailIds)
{
...
}下面是我通过邮递员给它打电话时所传递的论点:

下面是在将参数定义为十进制数组时,如何在操作中解析数组:

您可以看到,它有效地去掉了逗号,并将这三个数字连在一起,形成一个大的十进制值。
但是,如果我将参数的数据类型更改为int[],并使用相同的参数值从Postman再次调用它,这一次Web正确地解析了参数,将其分成三个数字:

为什么在解析与十进制数组和int数组相同的参数时有不同的行为?怎样才能让它正确地解析逗号分隔的小数呢?
编辑:我知道我可以通过在查询字符串中传递数组来使它工作。但是,我正在更新一个现有的应用程序,其中所有的参数都在URL路径中传递,而不是在查询字符串中传递,所以我想继续使用相同的约定。另一种选择是使用整数数组,因为这是可行的。但是,尽管shipmentDetailIds当前看起来是整数,但仓库管理系统中的数据类型是十进制的。我更倾向于坚持正确的数据类型,以防未来装运开始使用十进制风格的shipmentDetailIds。
发布于 2021-09-27 12:41:10
我测试了逗号分隔的数字字符串作为整数数组,并给出了错误。十进制数组接受字符串作为一个大数字,但只有当3位数是逗号分隔时。
因此,我建议您使用目前已知的唯一方法,如果您希望发送一个数字数组作为GET url的查询参数,它就能工作。
改变动作
[HttpGet("details")]
public async Task<List<ShipmentDetail>> GetByShipmentDetailIds([FromQuery] decimal[] shipmentDetailIds)
{
...
}若要使用邮递员GET,请使用以下查询字符串
...Details?shipmentDetailIds=1232&shipmentDetailIds=2335..and so on如果仍然希望使用包含数字的逗号分隔字符串,则将动作输入参数作为字符串类型,动作内部使用拆分将字符串转换为数组。
https://stackoverflow.com/questions/69346277
复制相似问题