如何使用Azure DevOps REST API禁用分支策略及解决PUT请求报错
你调用PUT接口失败的核心原因是Azure DevOps 策略配置更新接口不支持局部字段更新,你仅提交isEnabled字段的做法不符合接口要求,具体疏漏有2点:
- 第一,该PUT接口要求请求体必须携带完整的策略配置对象,不能只传递需要修改的字段,必填字段包括
type.id、完整的settings节点、isBlocking、revision等,缺失必填字段会触发JSON解析/校验异常。 - 第二,你提交的JSON结构不满足接口的Schema要求,服务端无法正常解析,所以抛出了
JsonReaderException相关的内部错误。
正确操作步骤
- 先从GET接口返回的结果中复制完整的单条策略配置(即
value数组内的整个对象) - 修改其中的
isEnabled字段为false,保持revision字段的值和当前获取到的一致(你当前的revision值为1) - 将修改后的完整对象作为PUT请求的请求体发送
正确的CURL命令示例如下,你需要把其中的占位符替换为实际取值即可:
curl --url "https://dev.azure.com/{ORG}/{PROJ}/_apis/policy/configurations/2?api-version=6.0" \ --user "username:password" \ --request PUT \ --header "Content-Type: application/json" \ --data '{ "createdBy": { "displayName": "Akshay B", "url": "XXXX", "_links": { "avatar": { "href": "XXXX" } }, "id": "XXXX-XXXX-XXXX-XXXX-e0fdec2c1636", "uniqueName": "XXXX@XXXX.com", "imageUrl": "XXXX", "descriptor": "XXXX" }, "createdDate": "2021-08-30T12:24:43.0238821Z", "isEnabled": false, "isBlocking": true, "isDeleted": false, "settings": { "minimumApproverCount": 2, "creatorVoteCounts": false, "allowDownvotes": false, "resetOnSourcePush": false, "requireVoteOnLastIteration": false, "resetRejectionsOnSourcePush": false, "blockLastPusherVote": false, "scope": [ { "refName": "refs/heads/master", "matchKind": "Exact", "repositoryId": "XXXX-XXXX-XXXX-XXXX-cd2a5c3167b3" } ] }, "isEnterpriseManaged": false, "_links": { "self": { "href": "XXXX" }, "policyType": { "href": "XXXX" } }, "revision": 1, "id": 2, "url": "XXXX", "type": { "id": "XXXX-XXXX-XXXX-XXXX-4906e5d171dd", "url": "XXXX", "displayName": "Minimum number of reviewers" } }'
如果需要重新启用策略,仅需把上述请求体中的isEnabled改回true,再调用一次PUT接口即可。
内容的提问来源于stack exchange,提问作者AkshayBadri
相关产品推荐
相关产品推荐

