【发布时间】:2014-06-14 03:07:48
【问题描述】:
出于备份目的(因为用户很擅长意外删除他们不应该删除的内容)我正在尝试编写一些软件来将我公司用户“One Drives”的内容下载到公司网络,以便我们可以备份它们,以防他们删除任何内容。
我目前正在使用 Microsoft.SharePoint.Client 来执行此操作。 我也觉得 OneDrive For Business 与 OneDrive 有很大的不同(它与 Sharepoint 的纠缠)。
例如...如果我的 OneDrive 网址是 https://accountname-my.sharepoint.com/personal/firstname_lastname_mycompany_com/Documents/
我可以成功列出 Documents 根目录下的所有文件夹,并下载 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();
}
此代码适用于返回 Documents 文件夹中的文件夹列表,但是,我的问题是尝试列出其中一个文件夹的内容。
如果我尝试运行上面相同的代码,这次我会抛出以下异常。
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"
这发生在 GetDocumentLibrary() 中的 ExecuteQuery() 语句中,我不明白为什么它没有返回任何结果,因为我已更改 clientcontext 和 web 以指向要查询的新 URL 而不是指着文件的那个。
有谁知道它为什么要查找 /_vti_bin/sites.asmx,如果有的话,有人对我哪里出错有任何建议吗?
我是否以正确的方式解决这个问题?当涉及到 Sharepoint/OneDrive For Business 中的子文件夹时,我有什么遗漏吗?这是微软的一些怪事吗?
非常感谢
道吉
【问题讨论】:
标签: c# synchronization sharepoint-2013 office365 onedrive