Outlook 在 REST 调用中添加:Request Broker-ParseUri -- "Resource not found for the segment 'messages'."

Outllok add in REST call: RequestBroker-ParseUri -- "Resource not found for the segment 'messages'."

我关注了这个文档 https://docs.microsoft.com/en-us/outlook/add-ins/use-rest-api,并在休息时收到错误 api 调用:

{"error":{"code":"RequestBroker-ParseUri","message":"Resource not found for the segment 'messages'."}}

令牌和消息 ID 具有正确的值,代码来自文档,我唯一替换的是 Office.context.mailbox.restUrl 默认值 https://outlook.office.com 因为第一个对我来说是空的(为什么?)

实际代码:

function getItemRestId() {
    // Currently the only Outlook Mobile version that supports add-ins
    // is Outlook for iOS.
    if (Office.context.mailbox.diagnostics.hostName === 'OutlookIOS') {
        // itemId is already REST-formatted
        return Office.context.mailbox.item.itemId;
    } else {
      // Convert to an item ID for API v2.0
        return Office.context.mailbox.convertToRestId(
            Office.context.mailbox.item.itemId,
            Office.MailboxEnums.RestVersion.v2_0
      );
    }
}

function getCurrentItem(accessToken) {
    var itemId = getItemRestId();
    var getMessageUrl = 'https://outlook.office.com' +
      '/api/v2.0/messages/' + itemId;

  $.ajax({
      url: getMessageUrl,
      dataType: 'json',
      headers: { 'Authorization': 'Bearer ' + accessToken }
  }).done(function(item){
      var subject = item.Subject;
  }).fail(function(error){
      // log error is here 
  });
}

Office.context.mailbox.getCallbackTokenAsync({isRest: true}, function(result){
    if (result.status === "succeeded") {
        var accessToken = result.value;
        // Use the access token
      getCurrentItem(accessToken);
      } else {
        // Handle the error
      }
});

我做错了什么?你认为这是因为我替换了 restUrl 值吗?我确实使用自定义域电子邮件。

感谢您的宝贵时间!

由于您没有从 restUrl 属性 获取值,我怀疑您使用的是本地 Exchange 服务器。这是带有本地安装的 known issue。这也是使用 https://outlook.office.com 不起作用的原因(您的服务器不在该 URI 中)。

您可以使用 Hybrid Deployment 配置来解决这个问题。这允许您对本地服务器执行 Microsoft Graph API 调用。也就是说,我 没有尝试过这个 所以它在这种情况下可能不起作用。鉴于所有这些组件(1.5 和 Hybrid)都处于预览状态,因此应该始终预料到意想不到的结果。

我遇到了同样的问题。

我用过

var getMessageUrl = 'https://outlook.office.com/api/v2.0/me/messages/'+ itemId+"/attachments";

而不是低于url:

var getMessageUrl = 'https://outlook.office.com/api/v2.0/messages/' + itemId;

API 在使用第一个 API 后给出正确的响应。