2

アプリケーションで Google Data API for .Net(バージョン 1.9) を使用しています。Google アプリ アカウントを作成し、Google ドキュメントで [ユーザーはこの組織外でドキュメントを共有できない] 設定を設定しました。

Google ドキュメント 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

ドメイン外でファイルを共有しようとして、管理者が「Users cannot share documents outside this organization」フラグを設定している場合、API は実際には 400 を返します。

コードがバッチ リクエストを送信する場合 (要素が 1 つであっても)、バッチ レスポンスをチェックしてエラーに気付く必要があります。

代わりに、次のコードを使用してドキュメントを 1 人のユーザーと共有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 に答える