检查 graph.user 经理是否存在而不用 try catch

check if graph.user manager exists without try catch

我将所有 Active Directory 用户都列在一个列表中,并使用以下代码遍历用户以获取他们的经理。

  foreach (User u in userResult)
            {
            var graphClient = new GraphServiceClient(clientSecretCredential, scopes);
            var directoryObject = await graphClient2.Users[u.UserPrincipalName].Manager
                .Request()  
                .GetAsync();
}

如果用户有经理,这会工作得很好,但如果没有,代码就会失败。 我目前能看到的唯一解决方法是使用 try catch,但这感觉很粗糙,并且在迭代大量用户时效率不高。

有更好的方法吗?

获取用户,而不是管理员。用户有一个经理字段,可以检查是否为空。

如果用户不再是组织的一部分或服务器出现内部错误,您仍然需要执行 try/catch。 4xx 和 5xx 错误响应在 .NET 代码中引发异常。

您可以在此处使用 OData 查询 expand parameter 来单独查询管理器和用户。

查询 url 如下所示:

https://graph.microsoft.com/v1.0/users?$expand=manager($select=id,displayName)

而在asp.net核心使用Graph SDK时,由于需要查询所有用户,所以应该使用客户端凭证流,应该是这样的,请注意,如果使用时没有经理,属性 Manager 将为空:

var scopes = new[] { "https://graph.microsoft.com/.default" };
var tenantId = "your_tenant_name.onmicrosoft.com";
var clientId = "azure_ad_clientid";
var clientSecret = "client_secret";
var clientSecretCredential = new ClientSecretCredential(tenantId, clientId, clientSecret);
var graphClient = new GraphServiceClient(clientSecretCredential, scopes);
var users = await graphClient.Users.Request().Expand("manager($select=id,displayName)").GetAsync();