通过 Office365 API 获取由 sessionId 过滤的消息

joh*_*ser 3 outlook office365 office365api office365-restapi

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

假设我的对话 ID 是 AAQkADlkOGJmMTFmLTc2NjMtMKL3My04ZDhkLTVmZWNjMzA1ODY0NAAQAB11Xh2opSpBiXifMEJjhow=

我会提出这样的要求

https://outlook.office.com/api/v1.0/me/Messages?$filter=ConversationId%20eq%20AAQkADlkOGJmMTFmLTc2NjMtMKL3My04ZDhkLTVmZWNjMzA1ODY0NAAQAB11Xh2opSpBiXifMEJjhow=
Run Code Online (Sandbox Code Playgroud)

这会导致如下400响应:

{
  "error": {
    "code": "RequestBroker-ParseUri",
    "message": "Syntax error at position 98 in 'ConversationId eq AAQkADlkOGJmMTFmLTc2NjMtMKL3My04ZDhkLTVmZWNjMzA1ODY0NAAQAB11Xh2opSpBiXifMEJjhow='."
  }
}
Run Code Online (Sandbox Code Playgroud)

我尝试了其他事情,例如 url 编码的 sessionIdAAQkADlkOGJmMTFmLTc2NjMtMKL3My04ZDhkLTVmZWNjMzA1ODY0NAAQAB11Xh2opSpBiXifMEJjhow%3D导致相同的错误。

我还尝试简单地删除=似乎是吓坏它的角色

https://outlook.office.com/api/v1.0/me/Messages?$filter=ConversationId%20eq%20AAQkADlkOGJmMTFmLTc2NjMtMKL3My04ZDhkLTVmZWNjMzA1ODY0NAAQAB11Xh2opSpBiXifMEJjhow
Run Code Online (Sandbox Code Playgroud)

但这会导致以下错误

{
  "error": {
    "code": "RequestBroker-ParseUri",
    "message": "Could not find a property named 'AAQkADlkOGJmMTFmLTc2NjMtMKL3My04ZDhkLTVmZWNjMzA1ODY0NAAQAB11Xh2opSpBiXifMEJjhow' on type 'Microsoft.OutlookServices.Message'."
  }
}
Run Code Online (Sandbox Code Playgroud)

我还尝试弄乱 url 大写并使用+符号代替%20过滤器字符串,但我始终收到 400 个错误。

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

https://outlook.office.com/api/v1.0/me/Messages?$filter=IsRead%20eq%20true
Run Code Online (Sandbox Code Playgroud)

返回按我预期过滤的消息。

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

Ben*_*tra 5

您需要ConversationId用单引号括起来。这就是我如何在 C# 中伪造我的请求

string finalUrl = "https://outlook.office.com/api/beta/me/Messages?$filter=" + HttpUtility.UrlEncode(string.Format("ConversationId eq '{0}'", conversationId));
Run Code Online (Sandbox Code Playgroud)