我正在尝试使用Microsoft Graph的Beta版将EwsId
转换为RestId
或RestImmutableEntryId
。
将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或其他内容。
答案 0 :(得分:0)
您需要使用HttpServerUtility.UrlTokenEncode
而不是Convert.ToBase64String
。
从技术上来说,这两种方法都会生成Base64编码的字符串,但是在编码方面存在一些细微的差异。这是因为Base64认为+
,/
和=
字符有效,而URL无效。为了解决这个问题,RFC 4648定义了一种base64url
编码,该编码仅使用URL安全字符。 Exchange使用此Base64Url编码对ID进行编码。