【问题标题】:A 400 error occurs when creating a OneDrive API upload session创建 OneDrive API 上传会话时出现 400 错误
【发布时间】:2021-01-29 11:09:44
【问题描述】:

创建上传会话以将大文件上传到 oneDrive。

下面是请求地址。

https://graph.microsoft.com/beta/users/{userId}/drive/root:/UploadFiles/{fileName}:/createUploadSession

请求正文

  {
 "item": {
"@odata.type": "microsoft.graph.driveItemUploadableProperties",
"@microsoft.graph.conflictBehavior": "rename",
"name": "largefile.dat"
 }
}

出现无效请求错误。它出什么问题了?我看了教程并测试了它。

POST /drive/root:/{item-path}:/createUploadSession 内容类型:application/json

{
"item": {
"@odata.type": "microsoft.graph.driveItemUploadableProperties",
"@microsoft.graph.conflictBehavior": "rename",
"name": "largefile.dat"
}

}

https://docs.microsoft.com/en-us/graph/api/driveitem-createuploadsession?view=graph-rest-beta#create-an-upload-session

【问题讨论】:

  • 400 响应应包含带有失败详细信息的 JSON 正文 - 您有示例吗?
  • @Brad { "error": { "code": "invalidRequest", "message": "Invalid request", "innerError": { "date": "2020-10-15T04:24 :49", "request-id": "2733aaad-cb81-4762-acb5-cc069b44ddb2", "client-request-id": "3cd178ab-3315-c047-cab8-20b1c8166ec4" } } }
  • 请删除 odata.type 属性并试一试。它对我有用。

标签: api microsoft-graph-api onedrive microsoft-graph-sdks


【解决方案1】:

正如 Shiva 在对该问题的评论中所建议的那样,问题在于 @odata.type 的值对于这种情况是不正确的。一般来说,您根本不应该提供它,因为模式是强类型的,因此可以在没有任何客户端驱动提示的情况下派生适当的值。

【讨论】:

  • var jObject = JObject.FromObject(new { item = new Dictionary { { "@microsoft.graph.conflictBehavior", "rename" } }, fileSystemInfo = new Dictionary { { "@odata.type", "microsoft.graph.fileSystemInfo" } }, name = fileName }); var toJson = JsonConvert.SerializeObject(jObject); var content = new StringContent(toJson, Encoding.UTF8, "application/json"); var response = await _client.PostAsync("users/"+ upn + "/drive/root:/MailFiles/" + fileName +":/createUploadSession", content);
  • 如上要求,运行成功。但是,如果将文件转换为字节并发送到上传会话,则文件已损坏并上传。
猜你喜欢
  • 2020-07-19
  • 1970-01-01
  • 2012-12-21
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-10-14
  • 2015-03-17
相关资源
最近更新 更多