调用带有特殊字符的findRooms时出现“错误请求”错误

时间:2018-09-26 01:03:10

标签: odata microsoft-graph

在调用“ 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" } } }

此调用仅适用于不带特殊字符的会议室列表,但是要使该应用程序正常运行,它必须适用于所有会议室,并且某些确实包含这些字符。

谢谢!

2 个答案:

答案 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]的引用