[英]Microsoft Graph SDK .NET - get users with managers and extra fields
我想在我的 ASP.NET Core 2.2 應用程序中獲取所有圖形用戶及其經理和一些非默認字段。 為此,我編寫了以下代碼:
graphServiceClient = new GraphServiceClient(new DelegateAuthenticationProvider(async request =>
{
request.Headers.Authorization = new AuthenticationHeaderValue("bearer", await tokenProvider.GetToken());
}));
var page = await graphServiceClient.Users
.Request()
.Expand(e => e.Manager)
.Select(e => new
{
e.Department,
e.OfficeLocation,
e.JobTitle,
e.UserPrincipalName,
e.Mail,
e.GivenName,
e.DisplayName,
e.Surname,
e.MobilePhone,
e.Id,
e.EmployeeId
})
.GetAsync();
在針對每個用戶的此請求之后, Manager和EmployeeId字段均為空值。 我可以使用 /manager 和 /user 端點和 /?select=extension_88b64915d0de49799c8e36460702b34d_employeeNumber 參數直接從 API 獲取這些信息,但我想使用 SDK 並發出單個請求。
如何在使用 SDK 的一個請求中執行此操作?
我一直在尋找Microsoft Graph SDK類和方法,但運氣不佳。 無論如何,如果在您的Microsoft Graph SDK類和方法中,一次操作都找不到為您執行此操作的任何事情,這是因為SDK和API中的方法是要承擔單一責任的(如果某個方法獲得了用戶,它將不會做任何事情否則就請其經理)。 我還閱讀到,SDK始終落后於API當前狀態,如果要訪問最新功能,則應使用httpClient。
解決方案 :使用所需的邏輯實現自己的方法,並使用當前的SDK方法或使用httpClient調用Graph API來填充所需的信息
我發現了一些您可能熟悉的示例: https : //developer.microsoft.com/en-us/graph/graph-explorer
不幸的是,目前不支持通過單個請求來檢索用戶和管理者,但是可以考慮采用以下方法:
a)提交第一個請求,以通過List users
端點檢索用戶
b)構造並提交一個批處理請求,以通過List manager
端點檢索用戶的管理List manager
:
POST https://graph.microsoft.com/v1.0/$batch
Accept: application/json
Content-Type: application/json
{
"requests": [
{
"id": "1",
"method": "GET",
"url": "/users/{id1 | userPrincipalName1}/manager"
},
{
"id": "2",
"method": "GET",
"url": "/users/{id2 | userPrincipalName2}/manager"
},
//...
]
}
這是msgraph-sdk-dotnet
的示例:
//1. get user properties
var users = await graphClient.Users
.Request()
.Select(e => new
{
e.Department,
e.OfficeLocation,
e.JobTitle,
e.UserPrincipalName,
e.Mail,
e.GivenName,
e.DisplayName,
e.Surname,
e.MobilePhone,
e.Id,
e.EmployeeId
})
.GetAsync();
//2 get user's managers
var batchRequest = new BatchRequest();
foreach (var user in users)
{
batchRequest.AddQuery(graphClient.Users[user.UserPrincipalName].Manager.Request(), typeof(Microsoft.Graph.User));
}
var managers = await graphClient.GetBatchAsync(batchRequest);
foreach(var manager in managers)
{
if (manager != null)
{
//...
}
}
其中BatchRequest class
是實現對JSON批處理的支持的自定義類。
你可以試試這個。
var users = await client.Users.Request()
.Expand(u=>u.Manager)
.Filter("accountEnabled eq true")
.Select(u=>new
{
u.Id,
u.GivenName,
u.Surname,
u.DisplayName,
u.Mail,
u.JobTitle,
u.Department,
u.EmployeeId,
u.EmployeeType,
u.BusinessPhones,
u.MobilePhone,
u.Photo,
u.AccountEnabled,
u.Manager
})
.GetAsync();
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.