Outllok添加REST调用:RequestBroker-ParseUri - “找不到段'消息'的资源。”

时间:2017-07-21 13:35:57

标签: office365 outlook-addin office-js outlook-restapi

我遵循了这个文件 https://docs.microsoft.com/en-us/outlook/add-ins/use-rest-api,并在rest api call上收到错误:

{"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价值吗?我使用自定义域名电子邮件。

感谢您的时间!

2 个答案:

答案 0 :(得分:1)

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

您可以使用Hybrid Deployment配置解决此问题。这允许您对本地服务器执行Microsoft Graph API调用。也就是说,我没有尝试过这个所以它可能无法在这种情况下工作。鉴于所有这些组件(1.5和混合)都在预览中,应始终预期出现意外结果。

答案 1 :(得分:1)

我遇到了同样的问题。

我用过

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会给出正确的响应。