Ошибка "Bad request" при вызове findRooms со специальными символами - PullRequest
0 голосов
/ 26 сентября 2018

При вызове конечной точки findRooms и указании адреса электронной почты для списка комнат, запрос работает нормально, если адрес электронной почты не содержит специальных символов:

Пример списка комнат:

  • Имя: Boston-rooms (1/3)
  • Электронная почта: Boston-rooms?1/3?@domain.onmicrosoft.com (обратите внимание, что Microsoft удаляет пробелы и преобразует скобки в вопросительные знаки)

Пример вызова API:

В частности, именно символы ? и / вызывают проблему.Я пытался сбежать ?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 голосов
/ 28 сентября 2018

Для электронной почты допустимы специальные символы: `и !#$%&'*+-/=?^_{|}~.
. И если вы хотите использовать один из символов "(),:;<>@[\] и whitespace, вам придется использовать форму Quoted-string.Форма в кавычках означает, что локальная часть адреса окружена " (дополнительную информацию см. В Википедии ).

Поскольку ваше электронное письмо содержит () и whitespaces ваш адрес должен выглядеть следующим образом

"Boston-rooms (1/3)"@domain.onmicrosoft.com

Поскольку вы должны использовать это в URL, вам придется экранировать все символы, которые 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 будет работать, но действительный пример Email-Address из Википедии "very.(),:;<>[]\".VERY.\"very@\\ \"very\".unusual"@strange.example.com не работает.

Чтобы решить эту проблему, я бы порекомендовал вам открыть сообщение об ошибке на Github ,заявив, что документация предполагает, что эта операция полностью совместима со всеми форматами адресов электронной почты, но в действительности это не так.

На данный момент единственным вариантом будет изменение адреса электронной почты собраниякомната и ждать и надеяться, что это исправлено.

Как правило, форма в кавычках не используется совместно.Таким образом, высока вероятность того, что он не может использоваться везде (часто для проверки используется только простой RegEx).Имейте в виду, что даже RFC-стандарт предупреждает об использовании формы Quoted-string в некоторых случаях:

[...] хосту, который ожидает получать почту, СЛЕДУЕТ избегать определения почтовых ящиков, где Local-частьтребует (или использует) форму Quoted-string или где Local-part чувствительна к регистру.[Цитата из Rfc5321]

0 голосов
/ 28 сентября 2018

На основе вашего последнего описания и нашего опыта.Это не проблема 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 бостонская комната)

Сохраняйте хороший UX для своего AD и программного приложения.

...