注意:我最初在客户端库存储库中提出了这个问题,他们回复说这是服务库中的问题,而不是 .NET 库中的问题。
在开发过程中,我们一直在做这样的事情来获取用户组:
var user = await GraphClient.Users[userId].Request().Expand("memberOf").GetAsync();
其结果被提供给一个方法,该方法将使用可能返回的“NextPageRequest”对象来获取当前页面之外的结果。我们的假开发用户帐户以及早期的真实用户从未拥有足够的组成员身份来需要 NextPageRequest 逻辑,并且忘记了对其进行测试。
在获得拥有 20 多个组的用户后,最终发现,发出上述详细信息的请求会返回一页的成员资格,但不会返回 NextPageRequest 以在后续请求的选项中使用。您有关集合的文档看起来应该是这样完成的。
我相信您已经知道,一种有效的方法是这样的:
List<Group> userGroups = await GraphClient.Users[userId].MemberOf.Request().GetAsync().CurrentPage.Where(p => p.GetType() == typeof(Microsoft.Graph.Group)).Cast<Microsoft.Graph.Group>().ToList();
据我们所知,这会返回用户的所有组成员身份。如果意图是 Expand 不与“memberOf”一起使用,那么它根本不应该工作。目前,旧代码对于租户中 800 个用户中的大约 760 个用户运行良好,其余的是编写支票的用户:)。如果我们错误地执行了 .Expand("memberOf"),请告诉我。
此外,GetMemberGroups 的工作方式与 MemberOf 不同。意图是什么?也许做类似的事情GetMemberGroups(securityEnabledOnly = false, expandGroupInfo = false)可能会更清楚。
我正在邀请用户使用 Microsoft Graph REST API 作为成员添加到我的 Active Directory。
curl -X POST \
https://graph.microsoft.com/v1.0/invitations \
-H 'authorization: Bearer ey...Jg' \
-H 'cache-control: no-cache' \
-H 'content-type: application/json' \
-d '{
"invitedUserEmailAddress": "userInvite@hotmail.com",
"inviteRedirectUrl": "https://example.com/afterInvite",
"sendInvitationMessage": false,
"invitedUserType":"Member"
}'
Run Code Online (Sandbox Code Playgroud)
我确实收到了带有状态字段的正确响应:
"status": "待接受",
这当然是正确的,因为用户刚刚被邀请。有没有办法查看用户是否已兑换邀请?
多谢
我有一个具有以下属性的 Microsoft Graph 用户:
"onPremisesExtensionAttributes": {
"extensionAttribute1": "attr1",
"extensionAttribute2": null,
"extensionAttribute3": null,
"extensionAttribute4": null,
etc.
},
Run Code Online (Sandbox Code Playgroud)
我似乎找不到关于如何过滤此属性的任何文档或示例。我试过了:
https://graph.microsoft.com/beta/users?$filter=extensionAttribute1 eq 'attr1'
https://graph.microsoft.com/beta/users?$filter=onPremisesExtensionAttributes/extensionAttribute1 eq 'attr1'
https://graph.microsoft.com/beta/users?$filter=onPremisesExtensionAttributes/any(x:startswith(x,'attr1'))
Run Code Online (Sandbox Code Playgroud)
所有这些都会导致错误的请求,所以很明显有问题。
"code": "BadRequest",
"message": "Invalid filter clause",
Run Code Online (Sandbox Code Playgroud)
问题:如何针对 onPremisesExtensionAttributes 或任何其他包含命名属性列表的属性(例如 extensionAttribute1...n)设置过滤器的格式?对于字符串列表(例如 proxyAddresses),您可以执行以下操作:
$filter=proxyAddresses/any(x:startswith(x,%27smtp:myemail%27))
Run Code Online (Sandbox Code Playgroud) 我们想要一个应用程序,它使用 API (Graph Office365 REST) 来浏览电子邮件并列出收件人电子邮件别名。我们的电子邮件用户有几个别名,我们可以通过这些别名将电子邮件接收到同一个收件箱中。
例如 - primaryEmail@my-company.com(主要电子邮件)别名 - primaryEmail.alias1@my-company.com(别名 1)和 primaryEmail.alias2@my-company.com(别名 2)
当我们向 primaryEmail.alias1@my-company.com 发送电子邮件时,可以通过 primaryEmail@example.com 收件箱正确接收电子邮件。当我使用 API(me/messages/{ID} 或 me/messages/{ID}?$select=internetMessageHeaders)列出电子邮件的属性时,别名属性丢失并且 ToRecipients 属性已解析为 primaryEmail@my-公司网站。
有没有办法在 Message 对象中启用 toRecipient email Alias 属性。请帮忙...
提前致谢,
我正在开发一个 ASP.NET 应用程序,除其他外,它应该从 Azure Active Directory 检索用户。为此,我使用了 Microsoft Graph 1.14.0 版预览库,可在此处找到。
由于该库仅提供用于检索用户的异步方法,因此我使用以下(伪)代码来同步运行它。
string userPrincipalName = "test.user@intuneforeducation.com";
var task = Task.Run(async () => await _graphServiceClient.Users[userPrincipalName].Request().GetAsync());
while (!task.IsCompleted)
Thread.Sleep(200);
User retrievedUser = task.Result;
Run Code Online (Sandbox Code Playgroud)
我现在面临的问题是,在从 ASP.NET 应用程序调用这段代码时,task.IsCompleted永远保持false. 现在这是我无法理解的奇怪部分:代码在控制台应用程序和单元测试(使用 NUnit)中完美运行。
有人可能认为 GraphServiceClient 实例在这些版本中的构建方式不同,但我 100% 肯定它不是。组成它的信息是从数据库中加载的,单元测试中的代码与 ASP.NET 应用程序的控制器中的代码完全相同。使用单元测试,上述代码在大约 1.5 秒内执行完毕。在 ASP.NET 应用程序中,我让它运行了长达 30 分钟,没有任何结果,没有错误,没有超时,什么也没有。
我意识到这可能是一个小众问题,但我确实希望有人遇到同样的问题并能够解决它。
我设法解决了这个问题。奇怪的是,将我所有的方法转换为异步任务并没有奏效,甚至await一直挂着。然而,我不完全理解为什么我的解决方案现在有效。看起来我的伪代码并不完全准确,解决方案就在其中。
此代码永远保留在while (!runTask.IsCompleted).
object GetResult<TResult>(Task<TResult> task)
{
using (task)
using (var runTask = …Run Code Online (Sandbox Code Playgroud) 用例:
我们正在创建一个分析邮件内容的系统。如果我们能够根据其内容对电子邮件进行分类和存档,我们希望自动对同一对话/线程中的后续电子邮件进行分类。
问题在于,当我们代表不同用户查询时,作为(邮件)消息的一部分获得的对话 ID 不是唯一的。
一个例子:
答:我的收件箱中给定线程的对话 ID。
B:同一线程的 sessionId,但在不同用户的收件箱中。
价值观:
答:AAQkADUyZWYxNzljLTc4NjItNGMzYy1iZDYwLTE4NWEzNDg1OWUzZQAQABlanHOPI0v1ukA7KePaYv4=。乙:AAQkAGVkNGRjNWNmLTAwNTItNDA2NC1hOThhLTU5NTUyNGFjNTM5ZAAQABlanHOPI0v1ukA7KePaYv4=。
我可以使用此对话 ID 的一部分来识别不同用户之间的相同对话吗?该模式似乎是给定对话的最后 25-26 个字符是唯一的。其余的是 Guid + 某种后缀。
编辑:我的问题与 Microsoft Graph API 的使用有关。在 SO 上回答了与 ConversationIds 和 Outlook 电子邮件相关的问题,但这些问题描述了直接从 Outlook 客户端(或可能通过 Outlook api)获取电子邮件的情况。例如,像 ConversationIndex 和 ConversationTopic 这样的属性不在我从 Graph API 获得的消息中。
outlook outlook-addin office-js outlook-web-addins microsoft-graph-api
我收到以下错误或状态Not granted for my domain。见附件文件
这是因为我的角色是User?
我试图找到 Azure AD 是谁Global Administrator?
我按照以下步骤操作:
(https://portal.azure.com)。Azure Active DirectoryRoles and administratorsGlobal administrator Global administrator它下面说Microsoft Office 365 Portal这是什么意思?
我或组织中的其他人如何成为Global administrator?
我想要API permissions->User.Read.All未授予 mydomain
PS:我的邮箱是work email。
更新 2
Global administrator - Assignments说的Microsoft Office 365 Portal是我的管理员。如何获得这些凭证?

我们希望实现可以跟踪所有过去和新的聊天和频道消息的电子发现集成。
但我们观察到,使用委托权限,该应用程序只能列出用户(无论是否为管理员)所属的聊天;使用应用程序权限时,不支持列表聊天端点。
搜索网站,我们看到了这个问题:如何使用 Microsoft Graph API 检索其他用户的 MS Teams 聊天记录?
这表明这是不可能的。但是他的问题与我们的有点不同,而且是大约一年前的问题。所以我想确认一下:
谢谢!
Our setup is an on-premise Exchange Server which is accessible over the graph api. https://docs.microsoft.com/en-us/graph/hybrid-rest-support
We run in the issue, that our token is only "partial" working. And a token created by "Graph-Playground" is fully working. But we can't find any difference.
The token seems to be valid some …
exchange-server hybrid on-premises-instances microsoft-graph-api
我得到一个Microsoft.Graph.ServiceException与Code: timeout Message: The request timed out.在Microsoft.Graph.Core以下堆栈跟踪:
at Microsoft.Graph.HttpProvider.SendRequestAsync(HttpRequestMessage request, HttpCompletionOption completionOption, CancellationToken cancellationToken)
at Microsoft.Graph.HttpProvider.SendAsync(HttpRequestMessage request, HttpCompletionOption completionOption, CancellationToken cancellationToken)
at Microsoft.Graph.BaseRequest.SendRequestAsync(Object serializableObject, CancellationToken cancellationToken, HttpCompletionOption completionOption)
at Microsoft.Graph.BaseRequest.SendStreamRequestAsync(Object serializableObject, CancellationToken cancellationToken, HttpCompletionOption completionOption)
at MyCode.cs
Run Code Online (Sandbox Code Playgroud)
服务器返回以下标头:
"X-CorrelationId": "605c9349-69e2-4569-acb5-ff9fec9aa887.5e6c48a9-6492-497a-857f-a373bff98f37"
"X-OneDriveMeTA-Version": "1.0.7615.29479"
"X-ErrorCode": "General_Timeout"
"X-ErrorType": "Unexpected"
"X-ErrorSource": "Service"
"X-AspNet-Version": "4.0.30319"
"X-MSEdge-Ref": "Ref A: 71954E8D2D9F46ACAE2CA0953006DE5D Ref B: VIEEDGE1811 Ref C: 2020-11-30T08:56:32Z"
Run Code Online (Sandbox Code Playgroud)
服务器响应:
"Date": "Mon, 30 Nov 2020 08:57:24 GMT"
"StatusCode": "InternalServerError"
"RawResponseBody": "{\"error\":{\r\n \"code\": \"generalException\",\r\n …Run Code Online (Sandbox Code Playgroud)