2015-04-24 23 views
8

ProceduraOrgUnit Not Found utilizzando Google Directory API

ho intenzione di:

1. Ottenere un OrgUnit dal API Google Directory
2. Leggere l'OrgUnit e raccogliere i dati richiesti
3. Provare a eliminare OrgUnit appena raccolto.

Questo in qualche modo risulta in un errore 404 [non trovato]
Si prega di tenere presente che la classe DirectoryService che sto utilizzando funziona correttamente.
ho modificato il codice in questo esempio per rendere più facile da leggere, ad esempio: La gestione delle eccezioni non è incluso ecc

L'API

using Google.Apis.Admin.Directory.directory_v1 

1. Ottenere un OrgUnit dal Directory Google API

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


2.Read l'unità organizzativa e raccogliere le richieste di dati

string orgUnitPath = oUnit.OrgUnitPath; 


3.Try per eliminare l'unità organizzativa ho appena raccolto

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


L'eccezione

GoogleApiException è stata gestita

un'eccezione non gestita di tipo 'Google.GoogleApiException' si è verificato in Google.Apis.dll

Ulteriori informazioni: Google.Apis.Requests.RequestError unità Org non trovata [404]

+1

Sembra che tu stia usando FirstOrDefault(), che potrebbe darti un oggetto vuoto se non ci sono in effetti unità organizzative nel dominio.Puoi confermare che l'orgUnitPath è popolato e non vuoto? –

+0

In tal caso il passaggio 2 mi avrebbe dato una NullReferenceException –

+3

Non necessariamente Nick. Forse il valore ** predefinito ** per OrganisationUnits è una forma di oggetto contenente una raccolta vuota. Potrebbe non essere nulla, solo che orgUnitPath restituisce una stringa vuota o un valore null. Puoi confermarlo? Guarda gli [esempi su Enumerable.FirstOrDefault] (https://msdn.microsoft.com/en-us/library/vstudio/bb340482 (v = vs.100) .aspx) per un array vuoto. –

risposta

1

La mia reputazione non è abbastanza alta per aggiungere un commento per ottenere chiarimenti prima di pubblicare una risposta, quindi dovrò fare alcune ipotesi qui.

Primo presupposto è che si sta utilizzando un account di servizio per accedere all'API.

Secondo presupposto che hai un certificato dal pannello di controllo amministrativo di Google e tutto è in ordine.

Avevo un problema simile quando stavo aggiornando gli account utente tramite l'API e quello che per me era stato risolto era che un account amministratore di directory fungesse da delegato per l'account del servizio.

Ecco il codice che utilizzo per inizializzare il servizio Google Directory.

private static DirectoryService initializeGoogleDirectoryService() 
{ 
    try 
    { 
     String serviceAccountEmail = "[email protected]"; 

     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 = "[email protected]_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 
    { 
    } 
}