Powershell 为什么API调用在teamcity中不起作用

Powershell 为什么API调用在teamcity中不起作用,powershell,teamcity,Powershell,Teamcity,我创建了一个powershell脚本来调用RESTAPI。在powershell脚本中,我调用post、get和put方法。脚本在我的机器上运行良好,如果我直接在构建代理机器上运行powershell脚本,也可以正常工作。 但若我在TeamCity中创建一个构建步骤并调用.ps1(powershell文件),则POST和GET方法可以工作,但PUT方法不能工作。生成失败,出现错误: 调用RestMethod:{“代码”:404,“错误”:[{}]} 我使用下面的语法来调用PUT API Invo

我创建了一个powershell脚本来调用RESTAPI。在powershell脚本中,我调用post、get和put方法。脚本在我的机器上运行良好,如果我直接在构建代理机器上运行powershell脚本,也可以正常工作。 但若我在TeamCity中创建一个构建步骤并调用.ps1(powershell文件),则POST和GET方法可以工作,但PUT方法不能工作。生成失败,出现错误:

调用RestMethod:{“代码”:404,“错误”:[{}]}

我使用下面的语法来调用PUT API

Invoke-RestMethod -Uri $memberEditUrl -Method Put -Body $memberEditBody -ContentType "application/json"
我使用
Write Host
记录了这个命令,在构建运行之后,我转到构建日志,单击了记录的API URL,并在浏览器中调用了它,它正在工作

这是唯一一个球队城市,这是不起作用的


有什么问题吗?

尽量不要将正斜杠“/”和冒号“:”转换为%2F和%3A 将api置于单引号或双引号中“” 演示的示例

    $person = @{
    first='joe'
    lastname='doe'
}
$json = $person | ConvertTo-Json
$response = Invoke-RestMethod 'http://example.com/api/people/1' -Method Put -Body $json -ContentType 'application/json'

通过将参数值的斜杠(“/”)替换为tilda“~”解决了我的问题。冒号“:”没有变化。浏览器默认使用GET方法,而您使用的是PUT…@daggett。我没有提到这个问题。我意识到了这一点,后来尝试使用POSTMAN for PUT方法创建相同的url。它正在工作。只有在城市队,这是造成问题的原因。然后404-未找到。检查你的url。@daggett我从邮递员团队城市日志中复制了url,并在正文中提供了JSON数据。这就是我无法理解的地方,如果URL是错误的,它不应该在POSTMAN中工作,因为我正在处理teamcity登录案例中的URL,我的API需要URL中的一个参数,该参数是一个字符串,该字符串有正斜杠“/”和冒号“:”我将替换为%2F和%3A,因为在Invoke RestMethod中提供API URL