Invoke-RestMethod:您必须将ContentLength字节写入请求流

时间:2018-02-09 18:16:36

标签: powershell powershell-v3.0

我正在尝试将文件上传到网址。我尝试过这两种方法:

Invoke-RestMethod -Uri $uploadUrl -Method Put -Headers $uploadHdrs -InFile $uploadFilePath

Invoke-RestMethod -Uri $uploadUrl -Method Put -body $uploadFileBody -Headers $uploadHdrs

我收到错误:

Invoke-RestMethod : You must write ContentLength bytes to the request stream
before calling [Begin]GetResponse.

如果我添加-TransferEncoding参数,我会收到来自服务器的错误说不支持。

我可以做些什么来包含内容长度?

1 个答案:

答案 0 :(得分:1)

我认为您需要使用其他命令,例如Invoke-WebRequest或甚至更好直接从PowerShell调用.NET thisWebClient.UploadFile()方法

虽然REST方法可能概念包含上传文件,但这并不意味着Invoke-WebRequest命令已经过测试,可以支持您的方案。我建议进入较低级别(如WebClient),因为我们知道已经测试了更多场景(由较大的.NET团队),并且WebClient上有各种各样的方法来支持特定场景。

您可能会发现有关如何从PowerShell调用这些方法的一个示例是.UploadData

P.S。您获得的有关请求流的消息来自更低级别的.NET API,但WebClient更易于使用,应该正确设置ContentLength并且希望是"恰到好处& #34;为了你的需要。