【问题标题】:Invoke-RestMethod Error: Cannot Send Body TypeInvoke-RestMethod 错误:无法发送正文类型
【发布时间】:2018-04-18 12:14:50
【问题描述】:

我正在尝试使用 Invoke-RestMethod 从 Freshdesk 获取票证。我收到的错误是“Invoke-RestMethod:无法发送具有此动词类型的内容主体”。我的函数如下所示:

function opentickets()
{
$Body = @{
#description = $description.Text
email = $email.Text
#subject = $subject.Text
#type = $request.Text
#priority = 1
#status = 2
}
Invoke-RestMethod -uri "https://clasd.freshdesk.com/api/v2/tickets?" - 
ContentType application/json -Method Get -Body ($Body | ConvertTo-Json)
}

用于查看工单的 Freshdesk API 端点应返回类似于freshdesk 使用curl 提供的示例:

https://clasd.freshdesk.com/api/v2/tickets?email=[requester_email]

更新 如果我使用以下内容:

Invoke-RestMethod -uri 
"https://clasd.freshdesk.com/api/v2/tickets? 
email=xyz@clasd.net" -Headers $FDHeaders -ContentType 
 application/json -Method Get 

我收到了想要的结果。我可以将 Invoke 命令的结果输出到对用户更易读的东西吗?

【问题讨论】:

  • 尝试使用-Method Post 而不是get。您不能发送带有 get 的正文。我在您的链接中看不到示例,您可以从那里发布代码吗?

标签: powershell powershell-2.0 powershell-3.0 powershell-4.0 freshdesk


【解决方案1】:

对于任何客户端,您都不能将带有 GET 请求的有效负载(正文)发送到 RESTful 服务。过去大多数客户都允许您这样做,但现在已经改变了。

您的解决方法通过使用查询字符串来帮助解决问题。您必须查看 Freshdesk 的文档以了解它们是否支持 POST 请求以检索票证信息,或者确保查询字符串方法适合您的需求。

似乎推荐使用查询方法过滤票证:

https://developers.freshdesk.com/api/#filter_tickets

【讨论】:

  • HTTP 标准允许带有正文的 GET 请求。但是,有许多服务器和代理实现根本不支持这一点。所以最后,应该避免使用带有 body 的 GET :(
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-07-19
  • 2019-12-16
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多