2015-04-24 34 views
8

Thủ tụcđơn vị tổ chức Not Found sử dụng Google Directory API

Tôi sẽ:

1. Nhận một đơn vị tổ chức từ API Google Directory
2. Đọc đơn vị tổ chức và thu thập các dữ liệu cần thiết
3. Cố gắng xóa OrgUnit mà tôi vừa thu thập được.

Điều này bằng cách nào đó dẫn đến Lỗi 404 [Không tìm thấy]
Hãy nhớ rằng Lớp DirectoryService tôi đang sử dụng đang hoạt động bình thường.
tôi sửa đổi mã trong ví dụ này để làm cho nó dễ đọc, ví dụ: xử lý ngoại lệ không được bao gồm, vv

API

using Google.Apis.Admin.Directory.directory_v1 

1. Nhận một đơn vị tổ chức từ thư mục API Google

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


2.Read các đơn vị tổ chức và thu thập các dữ liệu cần thiết

string orgUnitPath = oUnit.OrgUnitPath; 


3.Try để xóa các đơn vị tổ chức tôi chỉ thu thập

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


Các ngoại lệ

GoogleApiException là unhandled

Một ngoại lệ unhandled của loại 'Google.GoogleApiException' xảy ra ở Google.Apis.dll

thông tin bổ sung: Google.Apis.Requests.RequestError đơn vị Org không tìm thấy [404]

+1

Dường như bạn đang sử dụng FirstOrDefault(), có thể cung cấp cho bạn một đối tượng trống nếu thực tế không có đơn vị tổ chức nào trong miền.Bạn có thể xác nhận rằng orgUnitPath được điền và không trống không? –

+0

Trong trường hợp đó, bước 2 sẽ cho tôi một NullReferenceException –

+3

Không nhất thiết là Nick. Có thể giá trị ** mặc định ** cho OrganisationUnits là một dạng của đối tượng chứa một tập hợp rỗng. Nó có thể không rỗng, nó chỉ có thể có nghĩa là orgUnitPath trả về một chuỗi rỗng hoặc giá trị null. Bạn có thể xác nhận điều đó không? Nhìn vào [ví dụ về Enumerable.FirstOrDefault] (https://msdn.microsoft.com/en-us/library/vstudio/bb340482 (v = vs.100) .aspx) cho một mảng trống. –

Trả lời

1

Danh tiếng của tôi không đủ cao để thêm nhận xét để làm rõ trước khi đăng câu trả lời, vì vậy tôi sẽ phải đưa ra một số giả định ở đây.

Giả thiết đầu tiên là bạn đang sử dụng tài khoản dịch vụ để truy cập API.

Giả định thứ hai là bạn đã có chứng chỉ từ bảng điều khiển quản trị Google của mình và tất cả đều được sắp xếp theo thứ tự.

Tôi gặp sự cố tương tự khi cập nhật tài khoản người dùng thông qua API và điều đã khắc phục sự cố cho tôi là có tài khoản quản trị viên thư mục làm đại biểu cho tài khoản dịch vụ.

Đây là mã tôi sử dụng để khởi tạo Dịch vụ Google Directory của mình.

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 
    { 
    } 
}