#c# #onedrive
#c# #onedrive
Вопрос:
Я могу создавать папки в существующих папках, но не в корневом каталоге. Я пробовал URL-адреса с идентификатором root и с несколькими вариантами синтаксиса пути, например, «root:/./:», но ни один из них не создает папку.
Я хотел бы увидеть пример создания папки под root в документе Microsoft.Graph REST API. Это может сэкономить много времени.
Спасибо за любой ответ!
Вот мой код:
public static async Task<GameStorageItem> CreateFolderAsync(string parentId, string parentPath,
string name)
{
var obj = new JObject
{
{ "name", name },
{ "folder", new JObject() },
{ "@microsoft.graph.conflictBehavior", "fail" }
};
dynamic json;
string content;
if (parentId == "root")
{
content = await MicrosoftAccount.PerformHttpRequestAsync(HttpMethod.Get,
$"me/drive", obj);
json = JValue.Parse(content);
parentId = json.id;
//parentId = "root:./:";
}
content = await MicrosoftAccount.PerformHttpRequestAsync(HttpMethod.Post, $"me/drive/items/{parentId}/children", obj);
json = JValue.Parse(content);
DateTimeOffset created = json.createdDateTime;
string id = json.id;
var folder = new GameStorageFolder(name, $"{parentPath}/{name}", id, created, false);
return folder;
}
public static async Task<string> PerformHttpRequestAsync(HttpMethod method, string request,
JObject json = null)
{
if (__authResult == null || await ValidateTokenAsync(5) == false)
{
try
{
await SignInAsync();
__authResult = await __client.AcquireTokenSilent(scopes,
__account).ExecuteAsync();
}
catch (MsalUiRequiredException)
{
//A MsalUiRequiredException happened on AcquireTokenSilentAsync.
//This indicates you need to call AcquireTokenAsync to acquire a token
try
{
//User must consent
__authResult = await __client.AcquireTokenInteractive(scopes)
.ExecuteAsync();
}
catch (MsalException ex)
{
//Error acquiring token
throw ex;
}
}
catch (Exception ex)
{
//Error acquiring token silently
throw ex;
}
}
var builder = new UriBuilder(__graphUrl request);
return await PerformHttpRequestWithTokenAsync(method, builder.Uri,
__authResult.AccessToken, json);
}
private static async Task<string> PerformHttpRequestWithTokenAsync(HttpMethod method,
Uri uri, string token, JObject json = null)
{
HttpResponseMessage response;
var httpClient = new HttpClient();
var request = new HttpRequestMessage(method, uri);
if (json != null)
{
request.Content = new StringContent(json.ToString(), Encoding.UTF8,
"application/json");
}
//Add the token in Authorization header
request.Headers.Authorization =
new System.Net.Http.Headers.AuthenticationHeaderValue("Bearer", token);
response = await httpClient.SendAsync(request);
return await response.Content.ReadAsStringAsync();
}
Ответ №1:
У вас есть три разных варианта — я просто покажу их как запрос и позволю вам перевести его в код:
Вариант 1 — ОПУБЛИКОВАТЬ дочерним элементам
POST ../me/drive/root/children
{
"name": "foo",
"folder": {}
}
Вариант 2 — ПОМЕСТИТЬ в дочерний
PUT ../me/drive/root/children/foo
{
"folder": {}
}
Вариант 3 — УКАЗАТЬ путь
PUT ../me/drive/root:/foo
{
"folder": {}
}
Обратите внимание, что все эти URL-адреса ссылаются на root, а затем используют разные механизмы для создания папки под ним.
Ответ №2:
Корневые ресурсы OneDrive
При обращении к корневому ресурсу Microsoft Graph ваше приложение может обращаться к ресурсам OneDrive, используя следующие пути:
/drives
— Список ресурсов диска, доступных прошедшему проверку подлинности пользователю./drives/{drive-id}
— Доступ к определенному диску по его идентификатору./drives/{drive-id}/root/children
— Список элементов в корне определенного диска./drive/items/{item-id}
— Доступ к элементу привода по его идентификатору./drive/special/{special-id}
— Доступ к известной папке по ее известному имени./shares/{share-id}
— Доступ к элементу диска по его ShareID или URL-адресу общего доступа
Адресация на основе пути внутри диска
К элементу диска можно обращаться либо по уникальному идентификатору, либо по тому, где этот элемент существует в иерархии диска (т. Е. по пути пользователя). В запросе API двоеточие может использоваться для переключения между пространством пути API и пользовательским пространством пути. Этот синтаксис действителен для любого элемента диска, адресованного через пространство API.
Вы также можете вернуться к пространству пути API, используя двоеточие в конце пространства пути файловой системы. Убедитесь, что пользовательские данные в URL соответствуют требованиям к адресации и кодировке пути.
/drive/root:/path/to/file
— Доступ к элементу диска по пути из корня./drive/items/{item-id}:/path/to/file
— Доступ к элементу диска по его пути относительно другого элемента./drive/root:/path/to/folder:/children
— Список дочерних элементов при доступе по пути относительно корня диска./drive/items/{item-id}:/path/to/folder:/children
— Список дочерних элементов при доступе по пути относительно другого элемента.
https://learn.microsoft.com/en-us/onedrive/developer/rest-api/?view=odsp-graph-online .
Комментарии:
1. Спасибо за ваш ответ. Я уже прочитал все это в документе. Но это не помогает создать папку непосредственно под root. Я уже успешно создал папки в существующих папках. Пожалуйста, попробуйте создать папку непосредственно под root и покажите мне URI для этого.