返回Office 365 Mail REST API预览中的所有电子邮件元数据

时间:2014-04-24 13:30:30

标签: ms-office odata exchangewebservices office365

如何从作为Office 365 API预览一部分的Mail REST API返回所有元数据?

msdn文档似乎表示您发送一个值为“ application / json; odata.metadata = full ”的Accept标头,但这导致返回的属性数量有限并且不包括电子邮件的正文。

http://msdn.microsoft.com/en-us/library/office/dn605901(v=office.15).aspx

我也试过“ odata = verbose ”,结果相同。以下是在任何一种情况下返回的json:

{
  "@odata.context":"",
  "@odata.id":"",
  "@odata.editLink":"",
  "Id":"",
  "Subject":"",
  "DateTimeReceived":"",
  "From":{},
  "Attachments@odata.navigationLink":""
}

更新

REST端点: https://outlook.office365.com/ews/odata/Me/Inbox/Messages

Rohit Nagarmal的回答指出了我正确的方向。我有一个$ select查询参数中指定的字段列表,它覆盖了Accept标头的完整元数据设置。删除$ select查询后,返回完整的元数据。

2 个答案:

答案 0 :(得分:4)

您可以分享您用来访问消息的网址吗? 如果您使用的是: https://outlook.office365.com/ews/odata/Me/Inbox/Messages 你应该在响应中看到Body属性。 您还可以使用$ select专门请求选择性属性。例如: ?https://outlook.office365.com/ews/odata/Me/Inbox/Messages $选择=主题,正文&安培; $顶部= 1

$ top可用于限制返回的商品数量。

如果指定了$ select,它将覆盖Accept =" odata.metadata = full"设置并将仅返回$ select查询中指定的字段。

答案 1 :(得分:0)

很可能这甚至都不在你的雷达上......但这对我有用。

public async void GetFolderMessagesList(string parentFolderId,OnFeedBackMessage onFeedBackMessage,OnErrorMessage onErrorMessage) {      尝试      {

     jsonLastRun = "";

     var client = new HttpClient();
     var request = new HttpRequestMessage(HttpMethod.Get,
         new Uri(("https://outlook.office365.com/api/v1.0/me/folders/{ChangeThisToFolder_id}/messages")));

    // Add the Authorization header with the basic login credentials.
    var auth = "Basic " +
               Convert.ToBase64String(
               Encoding.UTF8.GetBytes(UserAccount + ":" + PassWord));
    request.Headers.Add("Accept", "application/json");
    request.Headers.Add("Authorization", auth);

    var response = await client.SendAsync(request);
    response.EnsureSuccessStatusCode();

   jsonLastRun = await response.Content.ReadAsStringAsync();

  }
  catch (Exception exception)
  {
       onErrorMessage?.Invoke("GetFolderList -> " + exception.Message);
  }

}