我正在尝试将包含字符串数组的一些数据发布到一个端点,但收到错误消息“无效数组”。
在此发布的结果为:
这段文字的英译中文如下:
我是这样做的:
.PostUrlEncodedAsync(new
{
amount = 1000,
allowed_source_types = new[] { "card_present" },
capture_method = "manual",
currency = "usd"
});
在此发布的结果为:
amount=1000&allowed_source_types=card_present&capture_method=manual¤cy=usd
API供应商抱怨我发布的数组无效。当我这样做时: .PostUrlEncodedAsync(
"amount=1000&allowed_source_types[]=card_present&capture_method=manual¤cy=usd"
);
这段文字的英译中文如下:
发布此内容的结果:
amount=1000&allowed_source_types[]=card_present&capture_method=manual¤cy=usd
API供应商很满意,我得到了预期的结果。
问题:这是一个错误吗?allowed_source_types参数是否应该包括最初在这里详细说明的[ ]?
allowed_source_types [] = card_present
将参数名为allowed_source_types []
的参数值设置为单个值card_present
--这与设置名为allowed_source_types
的参数不同。 API当然可以使用其中带有[]
的参数名称(如果在发送到服务器时正确编码),但这并不是标准。 Flurl没有被要求添加[]
是不正确的。当然,棘手的部分是您无法在C#中指定具有[]
的名称的属性,因此需要另一种机制。 - Jeroen Mosterta=val1&a=val2&a=val3
),或者是否也使用其他方式(a[]=val1,val2,val3
)。后者也不是通用库应该在未经请求的情况下执行的操作。(话虽如此,标准实际上并没有关于多值参数的规定,但第一种方式是自古以来浏览器使用的方式,因此被称为“标准”。API可能会有不同的想法。) - Jeroen MostertPostUrlEncodedAsync
对字典提供了特殊处理,这是我能想到的最好的方式来获得添加[]
的方法。 - Todd Menier