Строка фильтра поиска Microsoft Graph в C # - PullRequest
0 голосов
/ 11 мая 2018

Запрос ниже работает с тройным escape-символом, но не с одним Escape-символом, поэтому, если бы у меня было следующее:

string filter = "\"category <> \"Person\" AND category <> \"Person 2\""

Строка, указанная выше, даст нам:

filter = "category <> "Person" AND category <> "Person 2""

Это не будет работать, но приведенное ниже определение для фильтра будет работать:

string filter =
    "\"category <> \\\"Person\\\" AND category <> \\\"Person2\\\"\"";

List<QueryOption> options = new List<QueryOption>
{
    new QueryOption("$search", filter)
};

var messages = graphClient.Me
    .MailFolders
    .Inbox
    .Messages
    .Request(options)
    .Select("id, Categories, Subject")
    .Top(500)
    .GetAsync()
    .Result;

Этот напечатанный фильтр дает нам:

filter = "category <> \"Person\" AND category <> \"Person 2\""

Почему мы включаем \ в нашу печатную строку для вызова API? Может кто-нибудь объяснить это, пожалуйста?

Если бы \ был экранирующим символом в Microsoft Graph, то это имело бы смысл, но экранирующий символ в Graph - другой ".

1 Ответ

0 голосов
/ 12 мая 2018

Давайте начнем здесь.

new QueryOption("$search", filter)

То, что мы здесь делаем, - это подготовка $search фильтра, который будет добавлен к GET-параметрам URL-адреса ... что-то вроде этого.

https:? //...Endpoint $ поиск = фильтр

Если бы в последней строке не было экранирования ... это выглядело бы так

https: //...endpoint? $ Search = категория <> Персона И категория <> Персона 2

Это не очень хорошо. нам нужны двойные кавычки вокруг строк

https: //...endpoint? $ Search = category <> «Персона» И категория <> «Персона 2»

Лучше, но нам нужны кавычки вокруг всего нашего фильтра

https: //...endpoint? $ Search = "category <>" Person "И категория <>" Person 2 ""

Doh! Теперь наш фильтр содержит двойные кавычки в начале и конце, а также двойные кавычки вокруг вложенных строк. хорошо, давайте избежим внутренних двойных кавычек.

https: //...endpoint? $ Search = "category <> \" Person \ "AND category <> \" Person 2 \ ""

Итак, теперь мы знаем, что нам нужно создать эту строку.

"категория <> \" Персона \ "И категория <> \" Персона 2 \ ""

хорошо, в C # у нас есть пара вариантов ... мы можем использовать либо обычную строку, что означает, что нам нужно будет экранировать \ и "

var x = "\"category <> \\\"Person\\\" AND category <> \\\"Person 2\\\"";

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

var y = @"""category <> \""Person\"" AND category <> \""Person 2\""";
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...