Flurl 阵列编码
Flurl Array Encoding
我正在尝试 post 一些包含字符串数组的数据到端点,但收到错误 "Invalid array"
这样做:
.PostUrlEncodedAsync(new
{
amount = 1000,
allowed_source_types = new[] { "card_present" },
capture_method = "manual",
currency = "usd"
});
post编辑的结果:
金额=1000&allowed_source_types=card_present&capture_method=手动&货币=美元
API 供应商抱怨我 post 编辑的数组无效。当我这样做时:
.PostUrlEncodedAsync(
"amount=1000&allowed_source_types[]=card_present&capture_method=manual¤cy=usd"
);
post编辑的结果:
金额=1000&allowed_source_types[]=card_present&capture_method=手动&货币=美元
API 供应商很高兴,我得到了预期的结果。
问题:这是一个错误吗?allowed_source_types 参数是否应该包括最初详细说明的 [ ] here?
这不是错误。如评论中所述,URL 编码集合没有标准,但可以这样做:
x[]=1,2,3
比这样做要少得多:
x=1&x=2&x=3
后者是how Flurl has implemented it.
按照 API 要求的方式进行操作的麻烦在于 []
在 C# 标识符中无效,因此典型的对象表示法将不起作用。但是 Flurl 对 Dictionary
对象给予特殊处理,所以最好的办法是这样做:
.PostUrlEncodedAsync(new Dictionary<string, object>
{
["amount"] = 1000,
["allowed_source_types[]"] = "card_present", // or string.Join(",", allowedSourceTypes)
["capture_method"] = "manual",
["currency"] = "usd"
});
我正在尝试 post 一些包含字符串数组的数据到端点,但收到错误 "Invalid array"
这样做:
.PostUrlEncodedAsync(new
{
amount = 1000,
allowed_source_types = new[] { "card_present" },
capture_method = "manual",
currency = "usd"
});
post编辑的结果:
金额=1000&allowed_source_types=card_present&capture_method=手动&货币=美元
API 供应商抱怨我 post 编辑的数组无效。当我这样做时:
.PostUrlEncodedAsync(
"amount=1000&allowed_source_types[]=card_present&capture_method=manual¤cy=usd"
);
post编辑的结果:
金额=1000&allowed_source_types[]=card_present&capture_method=手动&货币=美元
API 供应商很高兴,我得到了预期的结果。
问题:这是一个错误吗?allowed_source_types 参数是否应该包括最初详细说明的 [ ] here?
这不是错误。如评论中所述,URL 编码集合没有标准,但可以这样做:
x[]=1,2,3
比这样做要少得多:
x=1&x=2&x=3
后者是how Flurl has implemented it.
按照 API 要求的方式进行操作的麻烦在于 []
在 C# 标识符中无效,因此典型的对象表示法将不起作用。但是 Flurl 对 Dictionary
对象给予特殊处理,所以最好的办法是这样做:
.PostUrlEncodedAsync(new Dictionary<string, object>
{
["amount"] = 1000,
["allowed_source_types[]"] = "card_present", // or string.Join(",", allowedSourceTypes)
["capture_method"] = "manual",
["currency"] = "usd"
});