При создании сеанса загрузки API OneDrive возникает ошибка 400

#api #microsoft-graph-api #onedrive #microsoft-graph-sdks

#API #microsoft-graph-api #onedrive #microsoft-graph-sdks

Вопрос:

Создайте сеанс загрузки для загрузки больших файлов в 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://learn.microsoft.com/en-us/graph/api/driveitem-createuploadsession?view=graph-rest-beta#create-an-upload-session

Комментарии:

1. 400 Ответ должен содержать тело JSON с подробным описанием сбоя — у вас есть пример?

2. @Brad { «ошибка»: { «код»: «Недопустимый запрос», «сообщение»: «Недопустимый запрос», «Внутренняя ошибка»: { «дата»: «2020-10-15T04:24:49», «идентификатор запроса»: «2733aaad-cb81-4762-acb5-cc069b44ddb2», «client-request-id»: «3cd178ab-3315-c047-cab8-20b1c8166ec4» } } }

3. Пожалуйста, удалите свойство odata.type и попробуйте. У меня это сработало.

Ответ №1:

Как предположил Шива в комментарии к вопросу, проблема заключается в том, что значение @odata.type неверно для этого случая. В общем случае вы не должны предоставлять его вообще, поскольку схема строго типизирована, и поэтому соответствующее значение может быть получено без каких-либо подсказок, управляемых клиентом.

Комментарии:

1. var JObject = JObject . FromObject(новый { элемент = новый словарь<строка, объект> { { «@microsoft.graph.conflictBehavior», «переименовать» } }, FileSystemInfo = новый словарь<строка, объект> { { «@odata.type», «microsoft.graph.FileSystemInfo» } }, имя =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», содержимое);

2. Если запрос, как указано выше, будет выполнен успешно. Однако, если файл преобразуется в байты и отправляется в сеанс загрузки, файл поврежден и загружен.

3. Возможно, документы следует обновить, поскольку пример содержит это поле данных: learn.microsoft.com/en-us/graph/api /…