在我们的应用程序中,我们调用Microsoft Graph API来获取电子邮件标题数据。 在首次调用api的过程中,我们收到了电子邮件的以下sessionId详细信息
{"conversationId":"AAQkADVhMzU1YWY5LWVkNGQtNGZjOC1hMjJmLTk0MzIxMGQzMzRhMQAQAA8kZ_w6rdxIsHkFk+h7byQ="}
几秒钟后,当我们对同一封电子邮件提出类似的请求时,我们收到了一个不同的sessionId
{"conversationId":"AAQkADVhMzU1YWY5LWVkNGQtNGZjOC1hMjJmLTk0MzIxMGQzMzRhMQAQAA8kZ_w6rdxIsHkFk_h7byQ="}
现在,这里的期望是sessionId的值应始终保持不变。 在上述情况下,返回的2个sessionId的唯一区别是将'+'替换为'_'
AAQkADVhMzU1YWY5LWVkNGQtNGZjOC1hMjJmLTk0MzIxMGQzMzRhMQAQAA8kZ_w6rdxIsHkFk+h7byQ=
AAQkADVhMzU1YWY5LWVkNGQtNGZjOC1hMjJmLTk0MzIxMGQzMzRhMQAQAA8kZ_w6rdxIsHkFk_h7byQ=
详细步骤:-
AAQkADVhMzU1YWY5LWVkNGQtNGZjOC1hMjJmLTk0MzIxMGQzMzRhMQAQAA8kZ_w6rdxIsHkFk+h7byQ=
AAQkADVhMzU1YWY5LWVkNGQtNGZjOC1hMjJmLTk0MzIxMGQzMzRhMQAQAA8kZ_w6rdxIsHkFk_h7byQ=
问题:-
+和_是否可以互换
答案 0 :(得分:0)
您不应假定Exchange标识符在各个平台之间是可互换的。多年来,Exchange使用了大量的不同格式的标识符。这可能是这里问题的症结所在。
converting between them有一些机制,但是除非您别无选择,否则我通常不建议这样做。
我不确定为什么/如何解析OWS DOM,但坦率地说,我惊讶的是标识符如此接近而不是我认为它不能按预期运行。如果您想从OWA内的Graph中提取消息,则可以使用Outlook Web Add-in。外接程序框架包括一个convertToRestId方法,该方法返回可以与Microsoft Graph一起使用的标识符:
function getItemRestId() {
if (Office.context.mailbox.diagnostics.hostName === 'OutlookIOS') {
// itemId is already REST-formatted
return Office.context.mailbox.item.itemId;
} else {
// Convert to an item ID for API v2.0
return Office.context.mailbox.convertToRestId(
Office.context.mailbox.item.itemId,
Office.MailboxEnums.RestVersion.v2_0
);
}
}
对于+
和_
,这归结为编码格式。 Base64有多种风格。标准在标准Base64中,第62个字符为+
,第63个字符为/
。当您要在URL中使用Base64时会出现问题,因为+
和/
是保留字符。要解决此问题,您需要Base64的URL安全变体。有几种这样的变体。最常见的是 base64url (在RFC 4648中定义),它将-
换成第62位,_
换成第63位。