.Net的Google数据API允许在Google应用帐户中共享外部组织

时间:2012-04-11 05:18:21

标签: google-docs-api

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

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

但是当我从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);

1 个答案:

答案 0 :(得分:1)

如果您尝试在域外共享文件且管理员已设置“用户无法共享此组织外的文档”标记,则API实际返回400.

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

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

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);