检查 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();
我将所有 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();