c# - Microsoft Graph Beta - 从 EwsId 转换为 RestId 或 RestImmutableEntryId
问题描述
我正在尝试将 a 转换EwsId
为 aRestId
或RestImmutableEntryId
使用 Microsoft Graph 的 beta 版本。
RestId
将s转换为 s 效果很好RestImmutableEntryId
,但到目前为止从EwsId
. 可以理解的是,由于它处于测试阶段,因此该文档目前并不丰富,但我发现一些文档说它应该是可能的:
注意:您还可以使用
translateExchangeIds
将 Exchange Web 服务应用程序迁移到 Microsoft Graph”。
我所做的是Id
从.msg
文件中检索和转换,将其转换为 Base64 字符串,然后发送转换请求:
var client = new GraphServiceClient(etc..);
var messageId = Convert.ToBase64String(
System.Text.Encoding.UTF8.GetBytes("<someId@something.prod.outlook.com>")
);
var req = client
.Me
.TranslateExchangeIds(new [] { messageId },
ExchangeIdFormat.RestImmutableEntryId,
ExchangeIdFormat.EwsId);
var translateExchangeIdsCollectionPage = await req.Request().PostAsync();
我希望得到一个ConvertIdResult
回报,但相反,我得到一个Microsoft.Graph.GenericError
“[IdConverter::IsPublicFolder] 无效的压缩 ID”`
我无法找到与此错误相关的任何文档,以及如何修复它。我不是 Outlook 专家,所以就我所知,我使用了错误的 id 或其他东西。
解决方案
您需要使用HttpServerUtility.UrlTokenEncode
而不是Convert.ToBase64String
.
虽然两者在技术上都会生成 Base64 编码的字符串,但在编码方面存在一些细微差别。这是因为 Base64 认为+
、/
和=
字符是有效的,而 URL 则不是。为了解决这个问题,RFC 4648定义了一种base64url
只使用 URL 安全字符的编码。Exchange 使用此 Base64Url 编码对 ID 进行编码。
推荐阅读
- java - 如何在 Spring Boot 独立应用程序中激活 JMX 监控
- python - 如何整齐地格式化输出?
- java - 每当我添加 OnClickListener 或 Fragment 时,我的应用程序就会崩溃,这是我的 OnClickListener 代码
- javascript - 构建我的应用程序并安装 Google Maps API 后,每当我倾向于搜索位置时,我的应用程序就会崩溃
- jenkins - 詹金斯错误 com.sun.mail.smtp.SMTPSendFailedException: 530 5.7.57 SMTP; 客户端未通过身份验证
- php - 如何在刀片模板中使用带有日期的“If else”条件
- python - 使用 Beautifulsoup 查找版权字符
- css - Element::after - 叠加
- ubuntu - 无法构建使用 Qt5Widgets 的库
- php - WordPress自定义帖子页面不显示