文件名含#时,OneDrive批量创建上传会话返回400错误
问题
我有个叫File#.txt的文件,用OneDrive的createUploadSession接口上传时,单独调用API能返回200成功,但用批量请求(batch request)调用相同的URL和请求体,就会返回400 Bad Request。而且只有文件名带#的时候才会出这问题,希望批量请求能和单请求行为一致。
单独请求的参数:
- URL:
https://graph.microsoft.com/v1.0/me/drive/items/{itemId}/File#.txt:/createUploadSession - 请求体:
{ "item": { "@microsoft.graph.conflictBehavior": "replace" } }
原因
#在URL里是锚点标记,单独请求时,HTTP客户端(比如浏览器、Postman这类工具)会自动把它编码成%23;但批量请求是把URL放在JSON体里发送的,服务端不会自动处理这个特殊字符,会把#当成锚点解析,导致文件路径识别错误,所以返回400。
解决办法
把批量请求子URL里的#手动换成URL编码后的%23就行,修改后的子URL是:
https://graph.microsoft.com/v1.0/me/drive/items/{itemId}/File%23.txt:/createUploadSession
举个完整的批量请求例子:
{ "requests": [ { "id": "1", "method": "POST", "url": "/me/drive/items/{itemId}/File%23.txt:/createUploadSession", "body": { "item": { "@microsoft.graph.conflictBehavior": "replace" } }, "headers": { "Content-Type": "application/json" } } ] }
这样服务端就能正确解析文件路径,批量请求就会和单请求一样返回成功了。
内容的提问来源于stack exchange,提问作者Vinanth S Bharadwaj
相关产品推荐
相关产品推荐

