Directory objects are the base type for many directory entities including users, groups, devices, and service principals. The DirectoryObjects API provides common operations across these entity types.
var directoryObject = await graphClient.DirectoryObjects["object-id"].GetAsync();// Cast to specific typeif (directoryObject is User user){ Console.WriteLine($"User: {user.DisplayName}");}else if (directoryObject is Group group){ Console.WriteLine($"Group: {group.DisplayName}");}else if (directoryObject is Device device){ Console.WriteLine($"Device: {device.DisplayName}");}
Retrieve multiple directory objects by their IDs in a single request.
var requestBody = new GetByIdsPostRequestBody{ Ids = new List<string> { "user-id-1", "group-id-1", "device-id-1" }, Types = new List<string> { "user", "group", "device" }};var result = await graphClient.DirectoryObjects.GetByIds.PostAsync(requestBody);foreach (var obj in result.Value){ if (obj is User user) { Console.WriteLine($"User: {user.DisplayName}"); } else if (obj is Group group) { Console.WriteLine($"Group: {group.DisplayName}"); }}
Get all groups that a directory object is a member of (transitively).
var requestBody = new GetMemberGroupsPostRequestBody{ SecurityEnabledOnly = false // Include all groups, not just security groups};var memberGroups = await graphClient.DirectoryObjects["object-id"] .GetMemberGroups .PostAsync(requestBody);foreach (var groupId in memberGroups.Value){ Console.WriteLine($"Member of: {groupId}");}
Validate that a display name or mail nickname complies with naming policies.
var requestBody = new ValidatePropertiesPostRequestBody{ DisplayName = "Engineering Team", MailNickname = "engineering", OnBehalfOfUserId = "user-id"};await graphClient.DirectoryObjects.ValidateProperties.PostAsync(requestBody);// If validation fails, an error is thrown
Restore a recently deleted directory object from the deleted items container.
var restored = await graphClient.DirectoryObjects["object-id"] .Restore .PostAsync();if (restored is User user){ Console.WriteLine($"Restored user: {user.DisplayName}");}
var ids = new List<string> { /* large list of IDs */ };var batchSize = 1000; // Max allowedvar allObjects = new List<DirectoryObject>();for (int i = 0; i < ids.Count; i += batchSize){ var batch = ids.Skip(i).Take(batchSize).ToList(); var requestBody = new GetByIdsPostRequestBody { Ids = batch }; var result = await graphClient.DirectoryObjects.GetByIds.PostAsync(requestBody); allObjects.AddRange(result.Value);}