Google Dotnet API - 管理SDK组 - 获取错误请求错误

时间:2014-06-24 17:11:33

标签: c# google-api-dotnet-client

只是尝试仔细阅读Google Dotnet API Admin SDK。

当我尝试检索所有群组的列表时,我遇到了一些错误。我仍然对文档(使用哪些方法或功能等)感到困惑。

我现在的代码:

using System;
using System.IO;
using System.Threading;

using Google.Apis.Auth.OAuth2;
using Google.Apis.Services;
using Google.Apis.Util.Store;

using Google.Apis.Admin.Directory.directory_v1;
using Google.Apis.Admin.Directory.directory_v1.Data;

namespace GoogleConsoleApp
{
    class Program
    {
        static void Main(string[] args)
        {
            UserCredential credential;

            using (var stream = new FileStream("client_secrets.json", FileMode.Open, FileAccess.Read))
            {
                credential = GoogleWebAuthorizationBroker.AuthorizeAsync(
                    GoogleClientSecrets.Load(stream).Secrets,
                    new[] { DirectoryService.Scope.AdminDirectoryGroup, DirectoryService.Scope.AdminDirectoryGroupReadonly  },
                    "user", CancellationToken.None, new FileDataStore("Tasks.Auth.Store")).Result;
            }

            var dirSvc = new DirectoryService(new BaseClientService.Initializer()
            {
                HttpClientInitializer = credential,
                ApplicationName = "Groups API Sample",
            });

            Groups myGroups = dirSvc.Groups.List().Execute();

差点错误说:

Unhandled Exception: Google.GoogleApiException: Google.Apis.Requests.RequestError 
Bad Request [400]
Errors: [Message [Bad Request] Location [ - ] Reason[badRequest] Domain[global]]

我已经在Developer's Console中启用了必要的API。

对此有任何帮助将不胜感激。

更新: 我也尝试过这种方法(按照documentation):

Google.Apis.Admin.Directory.directory_v1.GroupsResource.ListRequest lreq = new GroupsResource.ListRequest(dirSvc);
            Groups grp2 = lreq.Execute();

但我仍然得到同样的错误。

1 个答案:

答案 0 :(得分:3)

您需要明确设置请求的域。错误在于假设如果你像其他类型的请求那样将域留空,那么它只会搜索全局域。在这种情况下,它会尝试搜索客户的组,这也是空白的。来自api spec

中的注释
  

检索时:

     
      
  • 子域的所有组 - 将domain参数与域名一起使用。
  •   
  • 帐户的所有组 - 将customer参数与my_customer或帐户的customerId值一起使用。作为一个帐户   管理员,使用字符串my_customer来表示您的帐户   顾客ID。如果您是访问转售客户的经销商   帐户,使用转售帐户的customerId。对于customerId值   在“检索a中的所有用户”中使用帐户的主域名   域操作的请求。生成的响应具有customerId   值。
  •   
  • 同时使用域和客户参数 - API返回域的所有组。
  •   
  • 未使用域和客户参数 - API会返回与my_customer关联的帐户的所有组。这是   发出API请求的管理员的帐户customerId。
  •   

有效的示例:

GroupsResource.ListRequest groupRequest = _service.Groups.List();
groupRequest.Domain = "YourDomain";
Groups domainGroups = groupRequest.Execute();

不起作用的示例会抛出完全相同的错误:

GroupsResource.ListRequest groupRequest = _service.Groups.List();
Groups domainGroups = groupRequest.Execute();