我正在使用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"
}
}
}
代码是否正确,这是一个错误,我错过了什么或什么? 有办法解决这个问题吗?
答案 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});
希望它能帮助你,如果它仍然是任何方式的继续下去。