首页 > 解决方案 > Microsoft Graph Beta - 从 EwsId 转换为 RestId 或 RestImmutableEntryId

问题描述

我正在尝试将 a 转换EwsId为 aRestIdRestImmutableEntryId使用 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 或其他东西。

标签: c#microsoft-graph-apimicrosoft-graph-sdksmicrosoft-graph-mail

解决方案


您需要使用HttpServerUtility.UrlTokenEncode而不是Convert.ToBase64String.

虽然两者在技术上都会生成 Base64 编码的字符串,但在编码方面存在一些细微差别。这是因为 Base64 认为+/=字符是有效的,而 URL 则不是。为了解决这个问题,RFC 4648定义了一种base64url只使用 URL 安全字符的编码。Exchange 使用此 Base64Url 编码对 ID 进行编码。


推荐阅读