如何使用Microsoft Graph API检索用户的个人资料和用户的日历?

时间:2018-10-29 09:19:56

标签: c# microsoft-graph microsoft-graph-sdks

我可以使用Microsoft Graph API检索用户的个人资料及其Web应用程序中的日历。有时,我必须一次提出要求;例如网络速度太慢或某种原因。但是,此API GET /me的响应中没有日历的属性。我该如何处理?

我通过Graph Client使用以下代码:

// get the user's profile
var me = await _serviceClient.Me.Request().GetAsync();

// list the user's calendars
var result = _serviceClient.Me.Calendars.Request().GetAsync();

有人可以帮助我吗?非常感谢。

3 个答案:

答案 0 :(得分:1)

Microsoft Graph的核心是API聚合器。换句话说,它充当多个产品API(Azure Active Directory,Exchange Online,SharePoint,OneDrive,OneNote等)的代理。通常,您无法跨API边界检索数据。

在这种情况下,#从Azure Active Directory提取数据,而/me从Exchange Online提取数据。因此,您无法从单个调用中检索两个结果集。

您可以使用JSON Batching来近似单个通话,但我不确定这会带来很大的不同。两个调用相对于一个调用的开销非常小,无论如何结果的大小应该几乎相同。 JSON批处理允许您进行一次调用,但它需要稍大的请求有效负载(要执行的JSON),并且结果大小也应与两次调用相同)。我希望任何性能差异最多都可以忽略不计。

答案 1 :(得分:1)

要添加到Marc的注释中,您不应假定批处理是最快的解决方案,因为HTTP请求可以并行发出。确实需要花一些时间处理Tasks,但是没有理由需要顺序执行多个调用。

这是来自Fiddler的时间线,它执行批处理调用,与其他两个调用执行相同的操作。

enter image description here

答案 2 :(得分:0)

根据您的描述,我假设您要获取用户的个人资料并在一个请求中列出其个人资料。

请参阅this document,我们可以使用以下API来实现。

string filePath = Path.Combine(Environment.SystemDirectory, "defrag.exe");

我们可以将两个请求放在正文中,如下所示:

`https://graph.microsoft.com/v1.0/$batch`

我们可以获得这样的结果(为简洁起见,屏幕截图已被截断) The result