我在我的应用程序中使用.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);
答案 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);