2012-04-11 3 views
2

Ich verwende Google Data API für .Net (Version 1.9) in meiner Anwendung. Ich habe ein Google Apps-Konto erstellt und unter Google Text & Tabellen die Einstellung "Nutzer können keine Dokumente außerhalb dieser Organisation freigeben" festgelegt.Google Daten-API für .Net ermöglicht das Teilen außerhalb der Organisation in Google Apps-Konto

Wenn ich versuche, eine Datei außerhalb der Domain (Organisation) von Google Docs Web zu teilen, erhalte ich eine Fehlermeldung, dass die Datei nicht außerhalb meiner Domain freigegeben werden kann.

Aber wenn ich das gleiche von der API versuchen, ist es erfolgreich. Ich bekomme einen 200 Erfolg von der API. Wenn ich versuche, über den Freigabe-Link auf die Datei zuzugreifen, wird "Sie benötigen die Berechtigung zum Zugriff auf diese Ressource" angezeigt. Meine Frage sollte nicht die API mit einem Fehler zurückgeben? Wie kann ich mit diesem Fall umgehen?


Hier ist der Code, den ich verwende:

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

Antwort

1

Die API gibt tatsächlich einen 400, wenn Sie versuchen, eine Datei außerhalb der Domain zu teilen und die Admins haben die „Benutzer nicht gesetzt Dokumente teilen können außerhalb dieser Organisation "Flagge.

Ihr Code sendet eine Stapelanforderung (selbst wenn für ein einzelnes Element), Sie müssten die Stapelantwort überprüfen, um den Fehler zu bemerken.

Verwenden Sie stattdessen den folgenden Code ein Dokument an einen einzelnen Benutzer zu teilen, es wird davon ausgegangen, dass entry ist die DocumentEntry Sie teilen möchten:

AclEntry acl = new AclEntry(); 
acl.Scope = new AclScope("[email protected]", "user"); 
acl.Role = new AclRole("reader"); 
acl = service.Insert(new Uri(entry.AccessControlList), acl); 
+0

Ihnen danken. Also sollte ich nicht Batch-Anfragen für einzelne Elemente verwenden? nur eine Klarstellung. –

+0

Es gibt keine Notwendigkeit, Stapel für eine einzelne Anfrage zu verwenden, es fügt tatsächlich etwas Overhead hinzu. –