.net-core - 无法将 MS Graph 消息转换为 EventMessage
问题描述
我们有一个 .NET Core 应用程序,它通过 Microsoft Graph 检查新的日历会议请求,然后解析事件信息。这个应用程序在过去一年一直在工作,最近(最好的猜测是 7 月 1 日)停止工作。以下代码使用MS Graph .NET 库版本 1.15.0 来请求消息和事件数据,并将其转换为 EventMessage。
public async Task<(List<Event>, DateTimeOffset?)> GetCalendarEventsCreatedSince(DateTimeOffset? lastRetrievalDate)
{
var lastRetrievalDateString = lastRetrievalDate.Value.ToString("yyyy'-'MM'-'dd'T'HH':'mm':'ss'Z'", null as DateTimeFormatInfo);
var eventMessages = await this._graphServiceClient.Me.Messages.Request()
.Top(50)
.Filter($"createdDateTime gt {lastRetrievalDateString} and microsoft.graph.eventMessage/meetingMessageType eq 'meetingRequest'")
.Expand("microsoft.graph.eventMessage/event, attachments")
.GetAsync();
foreach (var eventMessage in eventMessages)
{
var calEvent = (eventMessage as EventMessage)?.Event;
...
}
...
}
问题是(eventMessage as EventMessage)
已经开始返回 null,我们无法确定原因。sdk v1.15 中的an 特有的字段EventMessage
是MeetingMessageType 和Event,这两个都是返回的。
我们尝试过:
- 从.
Event
_AdditionalData
_ 评估为空。eventMessage
calEvent
foreach (var eventMessage in eventMessages)
{
if (eventMessage.AdditionalData.TryGetValue("event", out var eventData))
{
var calEvent = eventData as Event;
}
}
- 通过 id 请求特定的消息数据。
calEvent
评估为空。
foreach (var eventMessage in eventMessages)
{
var individualMessage = await this._graphServiceClient.Me.Messages[eventMessage.Id].Request().GetAsync();
var calEvent = individualMessage as EventMessage;
}
- 将 MS Graph .NET 库升级到版本 3.8.0(最新)。同样的问题。EventMessage 在类中有更多的字段。图表响应中唯一未包含的字段是 EventMessage.Location。
- 查看了MS Graph API 变更日志,但没有看到任何特定于 Message、EventMessage 或 Event 的内容。查询过滤器存在一些已知问题,但我们没有看到任何丢失的数据。
我们感谢任何想法或想法——谢谢!
解决方案
我们不确定为什么会出现这种情况,但这是我们升级到 Microsoft Graph .NET 库 v3.8.0 后的解决方案。
“事件”属性存在于 上eventMessage.AdditionalData
,但其值为 类型Newton.Json.JObject
。我们将 JObject 转换为事件,然后我们可以继续。
foreach (var eventMessage in eventMessages)
{
if (eventMessage.AdditionalData.TryGetValue("event", out var eventData))
{
var calEvent = (eventData as JObject)?.ToObject<Event>();
...
}
}
如果有人对为什么突然需要此解决方案有任何线索,请告诉我们。
推荐阅读
- python - 为什么某些线条样式在 matplotlib 中不起作用?
- amazon-web-services - AWS IoT-Core - 无法创建策略 - 大小超过硬限制 (2048) - 如何解决这个问题?
- javascript - 为什么在特定窗口大小以下的 HTML 中不显示伪元素
- nestjs - NestJS + TypeORM 中的 JoinTable 问题
- solr - Lucene如何搜索多值字段?
- endianness - 我可以在 qiskit 中将字节顺序从小端更改为大端吗?
- java - 在单元测试中在 Lombok 实例化之前加载 Spring Boot 组件
- ruby-on-rails - 运行迁移时没有将 nil 隐式转换为 String (TypeError)
- python-3.x - 连接断开的点:“连接被'ReadTimeoutError(“HTTPSConnectionPool(host ='pypi.org',port = 443)破坏:读取超时。”
- python - 根据数列重新排列数组元素并用数组id表示