在调用“ findRooms”终结点并为会议室列表指定电子邮件地址时,除非电子邮件地址包含特殊字符,否则请求正常运行:
房间列表示例:
Boston-rooms (1/3)
Boston-rooms?1/3?@domain.onmicrosoft.com
(请注意,Microsoft删除了空格并将括号转换为问号)API调用示例:
https://graph.microsoft.com/beta/me/findRooms(RoomList='Boston-rooms?1/3?@domain.onmicrosoft.com')
具体来说,是引起问题的?
和/
字符。我尝试将?1/3?
换成%281%2F3%29
,但是没有运气。返回相同的错误。
返回示例响应:
{
"error": {
"code": "BadRequest",
"message": "Bad Request - Error in query syntax.",
"innerError": {
"request-id": "126e8ffc-9b13-4d28-99da-2258a867d1ba",
"date": "2018-09-26T00:42:57"
}
}
}
此调用仅适用于不带特殊字符的会议室列表,但是要使该应用程序正常运行,它必须适用于所有会议室,并且某些确实包含这些字符。
谢谢!
答案 0 :(得分:0)
根据您的最新描述和我们获得的经验。这不是API问题,而是AD帐户格式的错误设计。
Boston-rooms?1/3?@domain.onmicrosoft.com' is a bad UX room mail.
好的UX是bostonroom13或类似的。尽管您可以在UserVoice中提交您所需的功能,但是由于这对您而言是不好的设计,因此Graph团队几乎无法为您添加此功能。
MS的一个很好的例子:bostonrm13@linkedin.com(显示名称:1/3 boston room)
为广告和软件应用程序保持良好的用户体验。
答案 1 :(得分:0)
对于电子邮件,允许的特殊字符为`和!#$%&'*+-/=?^_{|}~
。
而且,如果要使用字符"(),:;<>@[\]
和whitespace
中的一个,则必须使用加引号的字符串形式。
引号字符串形式表示地址的本地部分被"
包围(有关更多详细信息,请参见Wikipedia)。
由于您的电子邮件中包含()
和whitespaces
,因此您的地址必须像这样
"Boston-rooms (1/3)"@domain.onmicrosoft.com
由于您必须在网址中使用此字符,因此必须转义not Alphanumeric
,$-_.+!*'(),
或reseverd
的所有字符(另请参见此stackoverflow帖子)。
对于您而言,该地址必须转义至
%22Boston-rooms%20%281%2F3%29%22%40domain.onmicrosoft.com
a和对Graph的调用将是:
/beta/me/findRooms(RoomList='%22Boston-rooms%20%281%2F3%29%22%40domain.onmicrosoft.com')
该图形操作似乎并不完全符合所有电子邮件格式。
通过对Graph-Explorer的快速测试,我发现带有字符?/\<>
的地址失败了,并且.;(+-[]
似乎可以正常工作。 我没有测试每个字符。
例如,示例"Boston-rooms (1.+-3)"@domain.onmicrosoft.com
可以工作,但来自维基百科"very.(),:;<>[]\".VERY.\"very@\\ \"very\".unusual"@strange.example.com
的有效示例电子邮件地址无效。
要解决此问题,建议您打开Github上的错误报告, 指出documentation表示此操作与所有电子邮件地址格式完全兼容,但实际上并非如此。
目前,您唯一的选择是更改会议室的电子邮件地址,并等待它解决。
通常不普遍使用带引号的字符串形式。因此,概率很高,无法在任何地方处理(通常仅使用简单的RegEx进行验证)。 请注意,在某些情况下,即使RFC标准也会警告使用引号字符串形式:
[...]希望接收邮件的主机应避免定义邮箱 本地部分需要(或使用)带引号的字符串形式或 本地部分区分大小写。 [来自Rfc5321]的引用