MicrosoftGraph API无法将邮件标记为已读

时间:2017-07-29 21:32:32

标签: .net email outlook microsoft-graph

我正在使用Microsoft.Graph nuget包(版本1.6.2),我尝试将电子邮件标记为已读。 这是代码:

        msg.IsRead = true;
        await MainPage.GraphServiceClient.Me.Messages[msg.Id].Request().Select("IsRead").UpdateAsync(msg);

根据我的理解,上面的代码应该只将IsRead属性发送到服务器进行更新。 但是,执行此操作,发送整个消息对象(我已经用Fiddler验证了这一点),你得到了这个回复:

{
  "error": {
    "code": "ErrorInvalidPropertyUpdateSentMessage",
    "message": "Update operation is invalid for property of a sent message.",
    "innerError": {
      "request-id": "<A guid here that I wont share>",
      "date": "2017-07-29T21:10:18"
    }
  }
}

代码是否正确,这是一个错误,我错过了什么或什么? 有办法解决这个问题吗?

1 个答案:

答案 0 :(得分:6)

在遇到同样的问题后,我刚刚遇到了你的问题。

当我在多次尝试后看到,当您尝试更新(PATCH)不允许更新的字段时,会出现问题。

在你的情况下,在我的情况下, 问题是我们向msg对象发送了他的所有字段,而不仅仅是修补和修改过的字段。

而不是执行以下操作:

 var msg = await MainPage.GraphServiceClient.Me.Messages[imapMessage.MessageId].Request().GetAsync();
 msg.IsRead = true;
 await MainPage.GraphServiceClient.Me.Messages[msg.Id].Request().Select("IsRead").UpdateAsync(msg);

您应该首先获得IsRead属性,

<强>更新 从GraphAPI的1.9版本开始,我们只需要发送更新的属性而不用 readonly属性。

    await MainPage.GraphServiceClient.Me.Messages[msg.Id].Request().Select("IsRead").UpdateAsync(new Message {IsRead = true});

希望它能帮助你,如果它仍然是任何方式的继续下去。