Microsoft Graph Beta-从EwsId转换为RestId或RestImmutableEntryId

时间:2019-04-09 11:44:03

标签: c# microsoft-graph microsoft-graph-sdks microsoft-graph-mail

我正在尝试使用Microsoft Graph的Beta版将EwsId转换为RestIdRestImmutableEntryId

RestId转换为RestImmutableEntryId可以正常工作,但是到目前为止,从EwsId转换没有运气。可以理解的是,该文档目前尚处于测试阶段,因为尚处于测试阶段,但是I've found some documentation表示这是可能的:

  

注意:您还可以使用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或其他内容。

1 个答案:

答案 0 :(得分:0)

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

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