自分が所有者になっているグループの一覧を取得したい。
Program.cs
using Azure.Identity;
using Microsoft.Graph;
var scopes = new[] { "Directory.Read.All" };
var tenantId = "common";
var clientId = "{ Client_Id }";
var options = new InteractiveBrowserCredentialOptions
{
TenantId = tenantId,
ClientId = clientId,
AuthorityHost = AzureAuthorityHosts.AzurePublicCloud,
RedirectUri = new Uri("http://localhost:5001/"),
};
var interactiveCredential = new InteractiveBrowserCredential(options);
var graphClient = new GraphServiceClient(interactiveCredential, scopes);
var ownedObjectsPage = await graphClient.Me.OwnedObjects
.Request()
.Select("id,displayName")
.GetAsync();
var ownedObejcts = ownedObjectsPage.Where(g => g.ODataType == "#microsoft.graph.group");
foreach (var obej in ownedObejcts)
{
Console.WriteLine(obej.DisplayName); // ここでエラー
}
しかしこれだと obej に DisplayName がないと言われてしまう。
しかし Graph Explorer では DisplayName もちゃんと取れるし JSON にシリアライズしてみるとちゃんと DisplayName も持っている。
Program.cs
using System.Text.Json;
using Azure.Identity;
using Microsoft.Graph;
var scopes = new[] { "Directory.Read.All" };
var tenantId = "common";
var clientId = "{ Client_Id }";
var options = new InteractiveBrowserCredentialOptions
{
TenantId = tenantId,
ClientId = clientId,
AuthorityHost = AzureAuthorityHosts.AzurePublicCloud,
RedirectUri = new Uri("http://localhost:5001/"),
};
var interactiveCredential = new InteractiveBrowserCredential(options);
var graphClient = new GraphServiceClient(interactiveCredential, scopes);
var ownedObjectsPage = await graphClient.Me.OwnedObjects
.Request()
.Select("id,displayName")
.GetAsync();
var ownedObejcts = ownedObjectsPage.Where(g => g.ODataType == "#microsoft.graph.group");
foreach (var obej in ownedObejcts)
{
var jsonString = JsonSerializer.Serialize(obej);
Console.WriteLine(jsonString);
}
結論、DirectoryObject にはプロパティがないのでキャストしてあげれば OK。
Program.cs
using Azure.Identity;
using Microsoft.Graph;
var scopes = new[] { "Directory.Read.All" };
var tenantId = "common";
var clientId = "16b9bba3-76fd-4077-aac1-f03b343321a6";
var options = new InteractiveBrowserCredentialOptions
{
TenantId = tenantId,
ClientId = clientId,
AuthorityHost = AzureAuthorityHosts.AzurePublicCloud,
RedirectUri = new Uri("http://localhost:5001/"),
};
var interactiveCredential = new InteractiveBrowserCredential(options);
var graphClient = new GraphServiceClient(interactiveCredential, scopes);
var ownedObjectsPage = await graphClient.Me.OwnedObjects
.Request()
.Select("id,displayName")
.GetAsync();
var ownedObejcts = ownedObjectsPage.Where(g => g.ODataType == "#microsoft.graph.group");
foreach (var obej in ownedObejcts)
{
Console.WriteLine(((Group)obej).DisplayName);
}