Клиент Graph - это просто оболочка для REST API, и он не выполняет отложенную загрузку объектов.
Объект User
поступает из AAD, в то время как MailFolders
поступает из Exchange, и каждый является своей конечной точкой.
Как вы заметили, ваш Users
запрос работает правильно. Чтобы получить MailFolders
пользователя, вам нужно взять Id
или UserPrincipalName
из User
и использовать его для создания отдельного запроса для MailFolders
. Вам также нужно будет сделать еще один запрос для получения сообщений:
// Get all users with a displayName of roger*
var users = await graphClient
.Users
.Request()
.Filter("startswith(displayName,'roger')")
.GetAsync();
// Get the first user's mail folders
var mailFolders = await graphClient
.Users[users[0].Id] // first user's id
.MailFolders
.Request()
.GetAsync();
// Get messages from the first mail folder
var messages = await graphClient
.Users[users[0].Id] // first user'd id
.MailFolders[mailFolders[0].Id] // first mail folder's id
.Messages
.Request()
.GetAsync();
Если вас интересуют только «хорошо известные» почтовые папки, вы можете упростить этот запрос, используя общеизвестное имя . Например, вы можете запросить inbox
следующим образом:
// Get message from the user's inbox
var inboxMessages = await graphClient
.Users[users[0].Id] // first user'd id
.MailFolders["inbox"]
.Messages
.Request()
.GetAsync();
Учитывая, что вы используете только значения id
, вы можете оптимизировать это, запросив только свойство id
:
// Get all users with a displayName of roger*
var users = await graphClient
.Users
.Request()
.Select("id") // only get the id
.Filter("startswith(displayName,'roger')")
.GetAsync();
// Get the first user's mail folders
var mailFolders = await graphClient
.Users[users[0].Id] // first user's id
.MailFolders
.Request()
.Select("id") // only get the id
.GetAsync();