Rest PowerShell没有';无法识别提供的参数
操作系统-Windows 10 Powershell版本-5.1.15063.1088 我正在使用Windows PowerShell ISE(如果有意义的话)。运行简单的HTTP Post函数时Rest PowerShell没有';无法识别提供的参数,rest,powershell,content-type,Rest,Powershell,Content Type,操作系统-Windows 10 Powershell版本-5.1.15063.1088 我正在使用Windows PowerShell ISE(如果有意义的话)。运行简单的HTTP Post函数时 Function MyBeautifulFunction { $myCredentials = Get-Credential $body = @{ "query"="SELECT [System.Wheel],[System.SparkPlug],[System.Eng
Function MyBeautifulFunction {
$myCredentials = Get-Credential
$body = @{
"query"="SELECT [System.Wheel],[System.SparkPlug],[System.EngineOil],[System.Headlight],[System.RadioButton] FROM JunkYard WHERE [System.Brand] = 'Ford' AND [System.Model] = 'GT' AND [System.Title] CONTAINS 'Rebuild'"
} | ConvertTo-Json
Invoke-RestMethod -Uri 'http://example.com//ford/parts/fuelpump/_apis/wit/wiql?api-version=2.0' `
-Method Post `
-Credential $myCredentials `
-Body $body `
-ContentType 'application/json'
}
MyBeautifulFunction
编者按:Invoke RestMethod
调用最初是跨两行的,没有行延续,下面讨论这一部分
我在PowerShell ISE控制台窗口中收到以下错误消息:
"message":"The request indicated a Content-Type of \"application/x-www-form-urlencoded\" for method type \"POST\" which is not supported. Valid
content types for this method are: application/json, application/json-patch+json.
很明显,我在参数中传递了
'application/json'
,但出于某些原因,PowerShell仍在抱怨。以前有人遇到过这个错误吗?我应该用它向微软报告吗?感谢您的建议…您需要将标题传递到headers参数中
$headers = @{
"Content-Type" = "application/json",
"Accept" = "application/json"
}
Invoke-RestMethod -Uri 'http://example.com/123' -Method Post -Body $body -Headers $headers
请参见-两件事
首先,我一直使用application/json的内容类型调用REST服务,没有任何问题。例如,以下内容对我来说很好:
$url = 'https://jsonplaceholder.typicode.com/posts/1'
$response_from_webservice = Invoke-RestMethod -Uri $url -ContentType 'application/json' -Method 'Get'
jsonplaceholder。。。是一项公共服务,可用于测试。请在您的计算机上随意运行代码片段,以防需要进行健全性检查
其次,您发送的示例代码具有以下参数:
Invoke-RestMethod -Uri 'http://example.com//ford/parts/fuelpump/_apis/wit/wiql?api-version=2.0' -Method Post -Credential $myCredentials
-Body $body -ContentType 'application/json' -Accept 'application/json'
我想我以前没见过。我还使用Powershell v5.1.15063.1088运行Windows 10。我已经查过了。我检查了commandlet的参数。我没有找到它
我分享这一点是为了解释,我不能用那个通话信号重现你的场景
如果要将accept
条目添加到HTTP头中,则必须直接执行以下操作:
$h = new-object 'system.collections.generic.dictionary[[string],[string]]'
$h.add('accept', 'application/json')
$r = Invoke-RestMethod -Uri '...' -ContentType 'application/json' -Method 'Post' -Headers $h
第三,看起来您没有在代码段中指定内容类型。该代码段的Invoke rest方法
与body和contenttype参数位于单独的一行。我想说清楚,这不是包装。看起来那里有个断线。这意味着第二行-Body$Body-ContentType'application/json'-Accept'application/json'
与前面的调用无关;以下是从您的帖子中复制并粘贴的内容:
Invoke-RestMethod -Uri 'http://example.com//ford/parts/fuelpump/_apis/wit/wiql?api-version=2.0' -Method Post -Credential $myCredentials
-Body $body -ContentType 'application/json' -Accept 'application/json'
如果要将参数放在单独的行上,只需使用反勾号
Invoke-RestMethod -Uri 'http://example.com//ford/parts/fuelpump/_apis/wit/wiql?api-version=2.0' `
-Method Post `
-Credential $myCredentials `
-Body $body `
-ContentType `
'application/json'
现在,如果您不指定ContentType(正如我所建议的),那么在帖子上它将默认为“application/x-www-form-urlencoded”。据微软称:
-内容类型
指定web请求的内容类型
如果省略此参数且请求方法为POST,
Invoke RestMethod将内容类型设置为
application/x-www-form-urlencoded。否则,内容类型不正确
在调用中指定
谢谢在文档页面上,它清楚地表明invokerestmethod方法接受ContentType作为参数。因此,如果请求方法是Post,ContentType总是设置为application/x-www-form-urlencoded。参数的漂亮实现。这是传递标题数据的好方法,但您也可以将ContentType作为参数传递-仅供参考。@Kevin Smith顺便说一句,我相信它应该是$headers=@{“Content Type”=“application/json”},并在内容类型周围加引号,否则,鲍威尔会抱怨内容和键入单词之间的破折号字符感谢响应。我在一行中添加了所有内容-仍然不起作用。我删除了Accept(即使必须将其作为端点的Post请求传递)参数-不起作用。将内容类型添加为$headers变量的值-不起作用。每次我看到相同的错误消息时:请求表示方法类型“POST”的内容类型为“application/x-www-form-urlencoded”,这是不受支持的。此方法的有效内容类型为:application/json、application/json patch+json。“那么,让我们进一步讨论一下标题中的
Accept
条目<代码>调用RestMethod没有附带参数来指定响应格式。如果要添加条目,则需要手动添加。我已经用一个如何添加的示例更新了我的答案。如果您的服务需要该头条目,而您不提供它,那么这可能是一件好事。