2

我在我的应用程序中使用 Google Data API for .Net(1.9 版)。我创建了一个 Google Apps 帐户,并且在 Google Docs 下设置了“用户不能在此组织之外共享文档”设置。

当我尝试从 Google docs web 共享域(组织)之外的文件时,我收到一条错误消息,指出该文件无法在我的域之外共享。

但是当我从 API 尝试同样的事情时,它成功了。我从 API 获得了 200 次成功。当我尝试从共享链接访问文件时,它显示“您需要访问此资源的权限”。我的问题是 API 不应该返回错误吗?我该如何处理这种情况?


这是我正在使用的代码:

DocumentsRequest request = null;   

/* request  initialization */

string csBatchReqBody = "<?xml version="1.0" encoding="UTF-8"?><feed xmlns="http://www.w3.org/2005/Atom" xmlns:gAcl="http://schemas.google.com/acl/2007" xmlns:batch="http://schemas.google.com/gdata/batch"><category scheme="http://schemas.google.com/g/2005#kind" term="http://schemas.google.com/acl/2007#accessRule"/><entry><id>https://docs.google.com/feeds/default/private/full/document:1DsELtiNwq-ogOrp8cAONdMpGR4gBF79PjijTae-vVNg/acl/user:myusername@mydomain.com</id><batch:operation type="query"/></entry><entry><batch:id>1</batch:id><batch:operation type="insert"/><gAcl:role value="reader"/><gAcl:scope type="user" value="myusername@gmail.com"/></entry>"

string Url = "https://docs.google.com/feeds/default/private/full/document:1DsELtiNwq-ogOrp8cAONdMpGR4gBF79PjijTae-vVNg/acl/batch";

byte[] byteArray = Encoding.ASCII.GetBytes(csBatchReqBody);
MemoryStream inputStream = new MemoryStream(byteArray);
AtomEntry reply = request.Service.Insert(new Uri(Url), inputStream, "application/atom+xml", "");

MemoryStream stream = new MemoryStream();
reply.SaveToXml(stream);
4

1 回答 1

1

如果您尝试在域外共享文件并且管理员设置了“用户不能在此组织之外共享文档”标志,API 实际上会返回 400。

您的代码发送批处理请求(即使对于单个元素),您必须检查批处理响应以注意到错误。

相反,使用以下代码将文档共享给单个用户,它假定这entryDocumentEntry您要共享的:

AclEntry acl = new AclEntry();
acl.Scope = new AclScope("username@gmail.com", "user");
acl.Role = new AclRole("reader");
acl = service.Insert(new Uri(entry.AccessControlList), acl);
于 2012-04-12T18:51:15.893 回答