В целях резервного копирования (поскольку пользователи прекрасно умеют случайно удалять то, чего не должны), я пытаюсь написать какое-то программное обеспечение для загрузки содержимого пользователей моей компании «One Drives» в сеть компании, чтобы мы могли сделать их резервную копию на случай они удаляют что угодно.
В настоящее время я использую для этого Microsoft.SharePoint.Client. У меня также сложилось впечатление, что OneDrive для бизнеса достаточно отличается (с его запутанностью в Sharepoint) от OneDrive.
Например... если мой URL-адрес OneDrive — https://accountname-my.sharepoint.com/personal/firstname_lastname_mycompany_com/Documents/
Я могу успешно перечислить все папки в корне папки «Документы» и загрузить все файлы в корне папки «Документы».
Вот пример списка папок в Documents.
public void Listfiles()
{
var folders = ListFolders(dirPath, clientContext, web);
// now do something with results contained in 'folders'
}
public List GetDocumentLibrary(string libraryName, ClientContext clientContext, Web web)
{
var query = clientContext.LoadQuery(web.Lists.Where(p => p.Title == libraryName));
clientContext.ExecuteQuery();
return query.FirstOrDefault();
}
public List<Folder> ListFolders(string libraryName, ClientContext clientContext, Web web)
{
var list = GetDocumentLibrary(libraryName, clientContext, web);
var folders = list.RootFolder.Folders;
clientContext.Load(folders);
clientContext.ExecuteQuery();
return folders.ToList();
}
Этот код отлично работает для возврата списка папок в папке «Документы», однако моя проблема заключается в попытке вывести содержимое одной из этих папок.
Если я попытаюсь запустить тот же код, что и выше, на этот раз я получу следующее исключение.
An unhandled exception of type 'Microsoft.SharePoint.Client.ClientRequestException' occurred in Microsoft.SharePoint.Client.dll
Additional information: Cannot contact site at the specified URL
https://accountname-my.sharepoint.com/personal/firstname_lastname_mycompany_com/Documents.
There is no Web named "/personal/firstname_lastname_mycompany_com/Documents/_vti_bin/sites.asmx"
Это происходит в операторе ExecuteQuery() в GetDocumentLibrary(), я не понимаю, почему он не возвращает никаких результатов, поскольку я изменил клиентский контекст и веб-сайт, чтобы указать на новый URL-адрес для запроса вместо того, который указывает у документов.
Кто-нибудь знает, почему он ищет /_vti_bin/sites.asmx, если да, то есть ли у кого-нибудь предложения относительно того, где я ошибаюсь?
Правильно ли я это делаю? Есть ли что-то, что мне не хватает, когда речь идет о подпапках в Sharepoint/OneDrive для бизнеса? Это какая-то странность Microsoft?
Огромное спасибо
Дуги