首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >为什么Web在操作路径中正确解析逗号分隔的int数组,但不能解析逗号分隔的十进制数组?

为什么Web在操作路径中正确解析逗号分隔的int数组,但不能解析逗号分隔的十进制数组?
EN

Stack Overflow用户
提问于 2021-09-27 12:03:59
回答 1查看 1.4K关注 0票数 1

我有一个用.NET Core2.1编写的Web项目。我正在尝试创建一个操作,它可以将一个十进制值数组作为参数。

如果我将参数数据类型定义为string[]int[],那么当我调用操作时,传入逗号分隔的字符串时,Web可以将其解析为字符串数组或into数组。

但是,如果我将参数的数据类型更改为decimal[],并使用相同的逗号分隔字符串再次调用它,Web将这些逗号去掉,并将值连接在一起形成一个大的十进制。

如果参数定义为int[],而不是decimal[],为什么要正确拆分逗号分隔的字符串?

示例:

我的行动是:

代码语言:javascript
运行
复制
[HttpGet("details/{shipmentDetailIds}")]
public async Task<List<ShipmentDetail>> GetByShipmentDetailIds(decimal[] shipmentDetailIds)
{
    ...
}

下面是我通过邮递员给它打电话时所传递的论点:

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

您可以看到,它有效地去掉了逗号,并将这三个数字连在一起,形成一个大的十进制值。

但是,如果我将参数的数据类型更改为int[],并使用相同的参数值从Postman再次调用它,这一次Web正确地解析了参数,将其分成三个数字:

为什么在解析与十进制数组和int数组相同的参数时有不同的行为?怎样才能让它正确地解析逗号分隔的小数呢?

编辑:我知道我可以通过在查询字符串中传递数组来使它工作。但是,我正在更新一个现有的应用程序,其中所有的参数都在URL路径中传递,而不是在查询字符串中传递,所以我想继续使用相同的约定。另一种选择是使用整数数组,因为这是可行的。但是,尽管shipmentDetailIds当前看起来是整数,但仓库管理系统中的数据类型是十进制的。我更倾向于坚持正确的数据类型,以防未来装运开始使用十进制风格的shipmentDetailIds。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2021-09-27 12:41:10

我测试了逗号分隔的数字字符串作为整数数组,并给出了错误。十进制数组接受字符串作为一个大数字,但只有当3位数是逗号分隔时。

因此,我建议您使用目前已知的唯一方法,如果您希望发送一个数字数组作为GET url的查询参数,它就能工作。

改变动作

代码语言:javascript
运行
复制
[HttpGet("details")]
public async Task<List<ShipmentDetail>> GetByShipmentDetailIds([FromQuery] decimal[] shipmentDetailIds)
{
    ...
}

若要使用邮递员GET,请使用以下查询字符串

代码语言:javascript
运行
复制
...Details?shipmentDetailIds=1232&shipmentDetailIds=2335..and so on

如果仍然希望使用包含数字的逗号分隔字符串,则将动作输入参数作为字符串类型,动作内部使用拆分将字符串转换为数组。

票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/69346277

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档