ErrorAccessDenied в Microsoft Graph API при обновлении свойства IsRead почтового элемента - PullRequest
0 голосов
/ 03 июля 2018

Мы используем Microsoft Graph API для обработки календаря и почтовых отправлений. мы выбираем элементы из учетной записи office 365, обрабатываем элемент, затем помечаем его как прочитанный и после этого удаляем этот элемент, чтобы он больше не обрабатывался. В пометке элемент как процесс чтения у нас есть метод ниже

MarkReadMail()

{

var response = graphClient.Me.Messages[itemID].Request().Select("IsRead").GetAsync();

var msg = response.Result;

msg.IsRead = true;

graphClient.Me.Messages[itemID].Request().Select("IsRead").UpdateAsync(msg);

}

MarkReadMail() отлично работает с основной учетной записью Office 365, но на стороне клиента они использовали корпоративную учетную запись Office 365, выдает следующую ошибку:

Message: Exception occured in method MarkReadMail  :Code: ErrorAccessDenied
Message: Access is denied. Check credentials and try again.
Inner error
 Stack Trace:   at Microsoft.Graph.HttpProvider.<SendAsync>d__19.MoveNext()
--- End of stack trace from previous location where exception was thrown ---
   at System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess(Task task)
   at System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task)
   at Microsoft.Graph.BaseRequest.<SendRequestAsync>d__36.MoveNext()
--- End of stack trace from previous location where exception was thrown ---
   at System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess(Task task)
   at System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task)
   at Microsoft.Graph.BaseRequest.<SendAsync>d__32`1.MoveNext()
--- End of stack trace from previous location where exception was thrown ---
   at System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess(Task task)
   at System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task)
   at Microsoft.Graph.MessageRequest.<UpdateAsync>d__8.MoveNext()

Хотя мы предоставили разрешение Mail.ReadWrite в соответствии с делегированными разрешениями для обеих учетных записей.

Пожалуйста, предложите.

1 Ответ

0 голосов
/ 03 июля 2018

Вы не можете POST-объект, который вы получили от GET, так как он содержит свойства только для чтения (т.е. id). Вам нужно POST новый объект только с теми свойствами, которые вы хотите обновить:

graphClient
  .Me
  .Messages["itemID"]
  .Request()
  .UpdateAsync(new Message(){ IsRead = true });
...