LoginSignup
0
0

More than 1 year has passed since last update.

[Micorosoft Graph] DirectoryObject から DisplayName を取得したい

Posted at

自分が所有者になっているグループの一覧を取得したい。

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 がないと言われてしまう。

image.png

しかし 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);
}

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0