通过 Office365 获取按 conversationId 过滤的消息 API

Fetch messages filtered by conversationId via Office365 API

我在弄清楚如何使用 office365 api 获取给定 conversationId.

的消息时遇到了一些问题

假设我的 conversationId 是 AAQkADlkOGJmMTFmLTc2NjMtMKL3My04ZDhkLTVmZWNjMzA1ODY0NAAQAB11Xh2opSpBiXifMEJjhow=

我会提出这样的请求

https://outlook.office.com/api/v1.0/me/Messages?$filter=ConversationId%20eq%20AAQkADlkOGJmMTFmLTc2NjMtMKL3My04ZDhkLTVmZWNjMzA1ODY0NAAQAB11Xh2opSpBiXifMEJjhow=

这会导致 400 响应如下:

{
  "error": {
    "code": "RequestBroker-ParseUri",
    "message": "Syntax error at position 98 in 'ConversationId eq AAQkADlkOGJmMTFmLTc2NjMtMKL3My04ZDhkLTVmZWNjMzA1ODY0NAAQAB11Xh2opSpBiXifMEJjhow='."
  }
}

我尝试了其他方法,例如 url 将 conversationId 编码为 AAQkADlkOGJmMTFmLTc2NjMtMKL3My04ZDhkLTVmZWNjMzA1ODY0NAAQAB11Xh2opSpBiXifMEJjhow%3D,这导致了同样的错误。

我也试过简单地删除 = 这似乎是那个吓坏了它的角色

https://outlook.office.com/api/v1.0/me/Messages?$filter=ConversationId%20eq%20AAQkADlkOGJmMTFmLTc2NjMtMKL3My04ZDhkLTVmZWNjMzA1ODY0NAAQAB11Xh2opSpBiXifMEJjhow

但这会导致以下错误

{
  "error": {
    "code": "RequestBroker-ParseUri",
    "message": "Could not find a property named 'AAQkADlkOGJmMTFmLTc2NjMtMKL3My04ZDhkLTVmZWNjMzA1ODY0NAAQAB11Xh2opSpBiXifMEJjhow' on type 'Microsoft.OutlookServices.Message'."
  }
}

我也试过弄乱 url capitalization 并使用 + 符号而不是 %20 作为过滤器字符串,但我始终得到 400返回错误。

不过我可以按其他字段进行过滤。例如

https://outlook.office.com/api/v1.0/me/Messages?$filter=IsRead%20eq%20true

returns 邮件过滤如我所料。

知道 ConversationId 过滤器会发生什么吗?

您需要用单引号将 ConversationId 括起来。 这就是我在 C#

中伪造请求的方式
string finalUrl = "https://outlook.office.com/api/beta/me/Messages?$filter=" + HttpUtility.UrlEncode(string.Format("ConversationId eq '{0}'", conversationId));