【问题标题】:why does API call not working in teamcity为什么 API 调用在 teamcity 中不起作用
【发布时间】:2019-03-29 00:56:39
【问题描述】:

我创建了一个 powershell 脚本来调用 rest API。在 powershell 脚本中,我调用 post、get 和 put 方法。脚本在我的机器上工作正常,如果我直接在构建代理机器上运行 powershell 脚本也可以工作。 但是,如果我在团队城市中创建一个构建步骤并调用 .ps1(powershell 文件)POST 和 GET 方法有效,但 PUT 方法无效。构建失败并出现错误:

"Invoke-RestMethod : {"code":404,"errors":[{}]}"

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

Invoke-RestMethod -Uri $memberEditUrl -Method Put -Body $memberEditBody -ContentType "application/json"

我使用Write-Host 记录了这个命令,在构建运行之后我去构建日志并单击记录的 API URL 并在浏览器中调用它并且它正在工作。

这是唯一不起作用的团队城市。

可能是什么问题?

【问题讨论】:

  • 浏览器默认使用GET方法,而你使用的是PUT...
  • @daggett 我错过了有问题的提及。我意识到这一点,后来尝试使用 POSTMAN 的 PUT 方法使用相同的 url。这是工作。仅在团队城市中,这会导致问题。
  • 然后 404 - 未找到。检查你的网址。
  • @daggett 我从 POSTMAN 的团队城市日志中复制了 url,并在正文中提供了 JSON 数据。这就是我无法弄清楚的地方,如果 URL 错误,它不应该在 POSTMAN 中工作,因为我正在处理来自 teamcity 日志的 url
  • 如果我的 API 在 URL 中需要一个参数,该参数是一个字符串,并且该字符串具有正斜杠“/”和冒号“:”,我将用 %2F 和 %3A 替换它们,因为提供 API Invoke-RestMethod 中的 URl

标签: powershell teamcity


【解决方案1】:

尽量不要将正斜杠“/”和冒号“:”转换为 %2F 和 %3A 将 api 放在单引号或双引号中“http://asd.com/abc:1234” 演示示例

    $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'

【讨论】:

    【解决方案2】:

    我的问题已通过将斜杠 ("/") 替换为参数值的 tilda "~" 来解决。冒号“:”没有变化,它工作。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2018-05-14
      • 2017-06-15
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-03-13
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多