【发布时间】:2019-06-06 23:26:08
【问题描述】:
考虑GetCommits API。它有一个可选参数searchCriteria.ids,它是一个提交ID列表。
但是如何通过这个列表呢?例如,我有 2 个提交 A 和 B。我试过了:
- A,B
- A B
- [A,B]
我得到的回应是:
An object ID must be 40 characters long and only have hex digits. Passed in object ID: 0533232917cc37fb743d282c467eb41bafac15ee,063a6805640221285db15f75c3b3ca6f3fe619c
我对所有三个变体都得到相同的响应 - 只是报告的对象 ID 不同。
那么,如何在 GET 请求中将数组传递给 Azure Devops REST Api?
我使用 powershell。声明就是Invoke-RestMethod -UseDefaultCredentials -Uri $Url
变体 1 - 使用逗号
http://tfsserver:8080/tfs/defaultcollection/code/_apis/git/repositories/xyz/commits?api-version=4.1&searchCriteria.ids=0533232917cc37fb743d282c467eb41bafac15ee,063a6805640221285db15f75c3b3ca6f3fe619c0
结果
{"$id":"1","innerException":null,"message":"An object ID must be 40 characters long and only have hex digits. Passed in object ID: 0533232917cc37fb743d282c467eb41bafac15ee,063a6805640221285db15f75c3b3ca6f3fe619c0.","typeName":"System.ArgumentException, mscorlib","typeKey":"ArgumentException","errorCode":0,"eventId":0}
变体 2 - 使用空间
http://tfsserver:8080/tfs/defaultcollection/code/_apis/git/repositories/xyz/commits?api-version=4.1&searchCriteria.ids=0533232917cc37fb743d282c467eb41bafac15ee%20063a6805640221285db15f75c3b3ca6f3fe619c0
导致同样的错误。
变体 3 - 使用 JavaScript 数组 [,]
http://tfsserver:8080/tfs/defaultcollection/code/_apis/git/repositories/xyz/commits?api-version=4.1&searchCriteria.ids=[0533232917cc37fb743d282c467eb41bafac15ee,063a6805640221285db15f75c3b3ca6f3fe619c0]
同样的错误。
当我只通过一个没有任何额外符号的提交时,它确实有效。
使用 in 代替 =
建议使用 'in' 而不是 '='。这确实接受逗号,但似乎无法正常工作。请注意:
因此,使用 '=' 会产生一个提交 - 正如预期的那样。但是使用'in'会产生100?我尝试传递两个用逗号分隔的提交,它没有失败,但也返回 100 个提交。这是错误的。
【问题讨论】:
-
你能分享你的整个http消息吗?
-
文档没有指定数组是否需要是字符串数组。所以不清楚。这里有一个简单的例子来说明你如何做到这一点:
string[] ids = {"0533232917cc37fb743d282c467eb41bafac15ee", "063a6805640221285db15f75c3b3ca6f3fe619c"};然后你可以传入你刚刚创建的 ids 数组。 -
我添加了一条重要信息 - 我使用 powershell。你能把它翻译成powershell吗?因为我已经尝试过看起来像 powershell 数组的东西,如您所见。
标签: git rest powershell azure-devops