使用Google Directory API找不到OrgUnit

时间:2015-04-24 08:06:37

标签: c# .net wcf google-admin-sdk google-directory-api

程序

  

我要

1。从Google Directory API获取OrgUnit
2.阅读OrgUnit并收集所需数据
3.尝试删除刚刚收集的OrgUnit。

  这会以某种方式导致404 [未找到]错误
请记住我正在使用的DirectoryService类正常工作。
我修改了此示例中的代码以便于阅读,因为示例:不包括异常处理等。

API

using Google.Apis.Admin.Directory.directory_v1

1。从Google Directory API获取OrgUnit

DirectoryService directoryService = ServiceInitializers.InitializeDirectoryService();
OrgUnit oUnit = directoryService.Orgunits.List(Settings.customerId).Execute().OrganizationUnits.FirstOrDefault();


2.阅读OrgUnit并收集所需的数据

string orgUnitPath = oUnit.OrgUnitPath;


3.尝试删除我刚刚收集的OrgUnit

var orgUnitDeleteResult = directoryService.Orgunits.Delete(Settings.customerId, orgUnitPath).Execute();


例外

  

GoogleApiException未处理

Google.Apis.dll中出现未处理的“Google.GoogleApiException”类型例外情况   

  其他信息:Google.Apis.Requests.RequestError   未找到组织单位[404]

1 个答案:

答案 0 :(得分:1)

我的声誉不够高,无法在发布答案之前添加评论以澄清,所以我必须在此做出一些假设。

首先假设您使用服务帐户访问API。

第二个假设是您从Google管理控制台获得了证书,而且这些都是有序的。

当我通过API更新用户帐户时,我遇到了类似的问题,以及为我修复的问题是让目录管理员帐户充当服务帐户的代理。

以下是我用来初始化Google Directory Service的代码。

private static DirectoryService initializeGoogleDirectoryService()
{
    try
    {
        String serviceAccountEmail = "your_service_account_email@developer.gserviceaccount.com";

        var certificate = new X509Certificate2(@"your_certificate_name.p12", "your_secret", X509KeyStorageFlags.Exportable);

        // For the service account to work, a user with admin privs must be assigned as the delegate.
        ServiceAccountCredential credential = new ServiceAccountCredential(
           new ServiceAccountCredential.Initializer(serviceAccountEmail)
           {
               // Change the scope here to the one you need to modify org units.
               Scopes = new[] { DirectoryService.Scope.AdminDirectoryUser },
               User = "administrator_account@your_google_apps_domain.com"
           }.FromCertificate(certificate));

        // Create the service.
        var service = new DirectoryService(new BaseClientService.Initializer()
        {
            HttpClientInitializer = credential,
            ApplicationName = "Your_Application_Name"
        });

        return service;
    }
    catch (Exception ex)
    {
        // Exception handling code below.
        return null;
    }
    finally
    { 
    }
}