我正在使用面向Gitlab的REST API,目前,我们需要使用API更新一个子模块,在curl
中,过程应如下所示:
curl --request PUT -v --header "PRIVATE-TOKEN: XXXXXXXXXX" "http://mygitlab.com/api/v4/projects/1/repository/submodules/MYSUBMODULE" \
--data "branch=master&commit_sha=6bf09c4a3dc4ca79cbe301e6add06005f38ad9e3&commit_message=Update submodule reference"
使用
curl
可以正常工作,但是我们需要使用PowerShell来执行此操作,我们正在尝试使用Invoke-RestMethod for Powershell 5.1,并且根据文档,它应该是这样的:Invoke-RestMethod -Headers @{"PRIVATE-TOKEN"="$TOKEN"} -Method Put -Uri "http://mygitlab.com/api/v4/projects/1/repository/submodules/MYSUBMODULE" -Body "branch=master&commit_sha=6bf09c4a3dc4ca79cbe301e6add06005f38ad9e3&commit_message=Update submodule reference"
但是我们的结果如下:
Invoke-RestMethod:{“错误”:“commit_sha丢失,分支丢失”}
在C:\ version-manager \ release.ps1:67 char:1
+ Invoke-RestMethod- header @ {“PRIVATE-TOKEN” =“$ TOKEN”}-方法放入-U ...
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ~~~~~~~~~~~~~~~~~~~~
+ CategoryInfo:InvalidOperation:(System.Net.HttpWebRequest:HttpWebRequest)[Invoke-RestMethod],WebException
+ FullyQualifiedErrorId:WebCmdletWebResponseException,Microsoft.PowerShell.Commands.InvokeRestMethodCommand
请注意,就像没有得到主体一样,据我所知,PowerShell中
curl
中的--data
应该是-Body
。任何想法如何解决这个问题?
最佳答案
经过一番研究,我什至在documentation中说:
在调用中将内容类型指定为“application / x-www-form-urlencoded”(如果未指定,则应将其作为默认值)后,该调用即可工作。
最终解决方案是:
Invoke-RestMethod -Headers @{"PRIVATE-TOKEN"="$TOKEN"} -Method Put -Uri "http://mygitlab.com/api/v4/projects/1/repository/submodules/MYSUBMODULE" -Body "branch=master&commit_sha=6bf09c4a3dc4ca79cbe301e6add06005f38ad9e3&commit_message=Update submodule reference" -ContentType "application/x-www-form-urlencoded"
我希望这对将来的人有所帮助。