我正在尝试通过 Invoke-RestMethod 从 Powershell 脚本将文件上传到 SharePoint Online 当我使用哈希表作为标头时,响应表示实体需要 JSON 标头。当我将标头转换为 JSON 时,它说它无法绑定标头,因为它无法将类型字符串转换为 IDictionary 类型。
$Header = @{"Authorization" = "Bearer $accessToken"}
或
$Header = @{"Authorization" = "Bearer $accessToken"} |转换为 Json
Invoke-RestMethod -Uri $Url -Headers $Header -Method Put -Infile $Path -ContentType 'multipart/form-data' -Verbose
我错过了什么?
回复评论:
我已将脚本生成的令牌复制到 Postman 中的请求中,并收到包含有效数据的 200 响应。
标头作为哈希表时出错: { "error": { "code": "BadRequest", "message": "实体仅允许使用 JSON Content-Type 标头进行写入。", "innerError": { "date": "2024-04-26T18:26 :15", "请求 ID": “a870d677-7903-4417-a360-6abfbd056554”,“客户端请求ID”:“a870d677-7903-4417-a360-6abfbd056554”} } }
标头为 JSON 时出错: 无法绑定参数“标题”。无法转换“{”授权“:”承载 eyJ0e...此处为完整令牌...dswWw" }" 将“System.String”类型的值键入“System.Collections.IDictionary”。
对于未来的旅行者来说,事实证明错误消息与错误没有太大关系。标头不需要转换为 JSON。问题出在 -Uri 参数上:
Invoke-RestMethod -Uri $Url -Headers $Header -Method Put -Infile $Path -ContentType 'multipart/form-data' -Verbose
我有:
$Url =“https://graph.microsoft.com/v1.0/$TenantId/sites/$SiteId/drives/$LibraryId/items/root`:/$Filename/content”
需要是:
$Url =“https://graph.microsoft.com/v1.0/$TenantId/sites/$SiteId/drives/$LibraryId/items/root
:/$Filename
:/content”
注意 $Filename 变量后面的反引号和分号。