API данных Google для .Net позволяет совместно использовать внешнюю организацию в учетной записи приложений Google.

Я использую Google Data API для .Net(версия 1.9) в своем приложении. Я создал учетную запись приложений Google и установил параметр «Пользователи не могут обмениваться документами за пределами этой организации» в Документах Google.

Когда я пытаюсь поделиться файлом за пределами домена (организации) из Интернета документов Google, я получаю сообщение об ошибке, говорящее, что файл не может быть опубликован за пределами моего домена.

Но когда я пытаюсь сделать то же самое из API, мне это удается. Я получаю 200 успехов от API. Когда я пытаюсь получить доступ к файлу по ссылке общего доступа, он говорит: «Вам нужно разрешение для доступа к этому ресурсу». Мой вопрос: не должен ли 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:[email protected]</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="[email protected]"/></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);

person Raghunath Bharath    schedule 11.04.2012    source источник


Ответы (1)


API фактически возвращает 400, если вы пытаетесь поделиться файлом за пределами домена, а администраторы установили флаг «Пользователи не могут обмениваться документами за пределами этой организации».

Ваш код отправляет пакетный запрос (даже если для одного элемента), вам нужно будет проверить пакетный ответ, чтобы заметить ошибку.

Вместо этого используйте следующий код, чтобы поделиться документом с одним пользователем, он предполагает, что entry — это DocumentEntry, которым вы хотите поделиться:

AclEntry acl = new AclEntry();
acl.Scope = new AclScope("[email protected]", "user");
acl.Role = new AclRole("reader");
acl = service.Insert(new Uri(entry.AccessControlList), acl);
person Claudio Cherubino    schedule 12.04.2012
comment
Спасибо. Так что я не должен использовать пакетные запросы для одного элемента? просто уточнение. - person Raghunath Bharath; 13.04.2012
comment
Нет необходимости использовать пакет для одного запроса, это на самом деле добавляет некоторые накладные расходы. - person Claudio Cherubino; 13.04.2012