无法使用 Graph API 更新现有日历事件
Unable to update existing calendar event using Graph API
我正在尝试更新现有事件的以下字段,但未按预期更新。
我们要更新的字段:
- 添加和删除附件
- 更新主题和正文内容。
- 添加 and/or 删除 mandatory/optional 与会者。
使用以下代码删除附件:
await graphClient
.Users[organizer]
.Events[organizerEventId]
.Attachments[attachmentId]
.Request()
.DeleteAsync()
.ConfigureAwait(false);
使用以下代码添加附件:
var fileAttachment = new Microsoft.Graph.FileAttachment
{
ODataType = attachment.odataType,
Name = attachment.name,
ContentBytes = attachment.contentBytes,
ContentType = attachment.contentType
};
var response = await graphClient
.Users[organizer]
.Events[organizerEventId]
.Attachments
.Request()
.AddAsync(fileAttachment);
使用以下代码更新与会者:
var updateEvent = new Microsoft.Graph.Event
{
Attendees = attendees
};
var resultUpdate = await graphClient
.Users[organizer]
.Events[organizerEventId]
.Request()
.UpdateAsync(updateEvent);
使用以下代码更新主题和正文内容:
var updateEvent = new Microsoft.Graph.Event
{
HasAttachments = true,
ResponseRequested = false,
Subject = subject,
Body = body
};
var resultUpdate = await graphClient
.Users[organizer]
.Events[organizerEventId]
.Request()
.UpdateAsync(updateEvent);
我按顺序执行上面的代码,但是当我调试代码时,我发现它只执行第一个逻辑来删除附件和调用,而没有执行下面用相同方法编写的其余代码逻辑。
我找到了这个问题的根本原因并修复了它。
实际上,问题出在异步函数调用上。我试图从非异步函数调用异步函数,如下所示:
public void CreateEvent(type parameter1, type parameter2)
{
objMyServiceClass.CreateEvent(parameter1, parameter2);
}
我将上面的代码改成了下面的代码,因为 MyServiceClass 中的 CreateEvent 是一个异步函数。现在它开始正常工作了。
public void CreateEvent(type parameter1, type parameter2)
{
Task.Run(async () => await objMyServiceClass.CreateEvent(parameter1, parameter2));
}
我知道,这是一个非常愚蠢的错误,但有时我们开发人员很难找到这样一个愚蠢的错误并以噩梦告终。我希望它可以帮助某人。
谢谢!
我正在尝试更新现有事件的以下字段,但未按预期更新。
我们要更新的字段:
- 添加和删除附件
- 更新主题和正文内容。
- 添加 and/or 删除 mandatory/optional 与会者。
使用以下代码删除附件:
await graphClient
.Users[organizer]
.Events[organizerEventId]
.Attachments[attachmentId]
.Request()
.DeleteAsync()
.ConfigureAwait(false);
使用以下代码添加附件:
var fileAttachment = new Microsoft.Graph.FileAttachment
{
ODataType = attachment.odataType,
Name = attachment.name,
ContentBytes = attachment.contentBytes,
ContentType = attachment.contentType
};
var response = await graphClient
.Users[organizer]
.Events[organizerEventId]
.Attachments
.Request()
.AddAsync(fileAttachment);
使用以下代码更新与会者:
var updateEvent = new Microsoft.Graph.Event
{
Attendees = attendees
};
var resultUpdate = await graphClient
.Users[organizer]
.Events[organizerEventId]
.Request()
.UpdateAsync(updateEvent);
使用以下代码更新主题和正文内容:
var updateEvent = new Microsoft.Graph.Event
{
HasAttachments = true,
ResponseRequested = false,
Subject = subject,
Body = body
};
var resultUpdate = await graphClient
.Users[organizer]
.Events[organizerEventId]
.Request()
.UpdateAsync(updateEvent);
我按顺序执行上面的代码,但是当我调试代码时,我发现它只执行第一个逻辑来删除附件和调用,而没有执行下面用相同方法编写的其余代码逻辑。
我找到了这个问题的根本原因并修复了它。 实际上,问题出在异步函数调用上。我试图从非异步函数调用异步函数,如下所示:
public void CreateEvent(type parameter1, type parameter2)
{
objMyServiceClass.CreateEvent(parameter1, parameter2);
}
我将上面的代码改成了下面的代码,因为 MyServiceClass 中的 CreateEvent 是一个异步函数。现在它开始正常工作了。
public void CreateEvent(type parameter1, type parameter2)
{
Task.Run(async () => await objMyServiceClass.CreateEvent(parameter1, parameter2));
}
我知道,这是一个非常愚蠢的错误,但有时我们开发人员很难找到这样一个愚蠢的错误并以噩梦告终。我希望它可以帮助某人。 谢谢!