我有2个OneDrive帐户 . 帐户A与帐户B共享一个文件夹 . 我使用帐户B登录,并希望通过REST将帐户A的共享文件夹复制到帐户B中的文件夹 .
我知道OneDrive Live SDK文档说:https://msdn.microsoft.com/en-us/library/dn659743.aspx
复制操作的目标必须是文件夹 . 文件夹本身无法复制 . 此外,OneDrive存储的结构使得不同用户的OneDrive文件夹层次结构之间不会发生复制操作 . 例如,即使用户A可以读取用户B的文件,用户A也无法将其复制到他或她自己的OneDrive文件夹中 .
我没有使用Live API https://apis.live.net/v5.0/
,而是使用OneDrive API https://api.onedrive.com/v1.0/
当我在自己的OneDrive中复制文件夹到文件夹时,一切都很好:
POST https://api.onedrive.com/v1.0/drive/root:/test:/action.copy
Authorization: Bearer {ACCESS TOKEN}
Content-Type: application/json
Prefer: respond-async
{
"parentReference" : {"path": "/drive/root:/target"}
}
当我想通过Fiddler中的REST访问帐户A的文件夹时,我得到以下错误 .
休息电话:
POST https://api.onedrive.com/v1.0/drives/38A2C8D42D476A18/root:/test:/action.copy
Authorization: Bearer {ACCESS TOKEN}
Content-Type: application/json
Prefer: respond-async
{
"parentReference" : {"path": "/drive/root:/target"}
}
错误响应:
{"error":{"code":"itemNotFound","message":"Item does not exist"}}
我使用的范围是:
-
onedrive.readwrite
-
wl.signin
-
wl.skydrive
-
wl.skydrive_update
-
wl.contacts_skydrive
1 回答
我想我已经找到了答案 .
当帐户A与帐户B共享文件夹时,共享文件夹确实显示在帐户B的“共享”下!
所以我只需要在“共享”中获取此文件夹的ID,将其复制到帐户B上的首选目标文件夹中 .
如果有人有兴趣通过C#执行此REST CALL,只需使用RestSharp http://restsharp.org/ . 下面的C#代码片段