Как избежать тройных кавычек в строке С# для использования запросов GraphQL?

Я пытаюсь запустить Shopify bulkOperationRunQuery , используя GraphQL.Client.

Поле запроса должно быть установлено ниже, но я не могу установить поле запроса (строка типа), чтобы включить тройные кавычки.

Например, вот что нужно опубликовать, как показано в документации Shopify:

mutation {
  bulkOperationRunQuery(
   query: """
    {
      products {
        edges {
          node {
            id
            title
          }
        }
      }
    }
    """
  ) {
    bulkOperation {
      id
      status
    }
    userErrors {
      field
      message
    }
  }
}

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

var request = new GraphQLRequest
{
    Query = @"""
        mutation {
            bulkOperationRunQuery(
            query 
            """
            {
                products {
                    edges {
                        node {
                        id
                        title
                    }
                }
                }
            }
            """
            ) {
            bulkOperation {
                id
                status
            }
        userErrors
        {
            field
            message
            }
            }
        }
        """
};


var response = await graphQlClient.SendQueryAsync<dynamic>(request);

Как избежать включения тройных кавычек в строку запроса?

Обновлено: Это проект .NET 4.6.1. Я не могу использовать функции С# 11. Есть ли другой способ сделать это?

Iirc цитата экранируется путем написания двух кавычек, поэтому три должно быть как шесть?

flq 14.06.2023 18:56

@flq Удвоение сработало. Я отметил сообщение с вашим же предложением, что и ответ.

Rivka 15.06.2023 06:07
Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
0
2
57
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

Вместо экранирования """ начинайте и заканчивайте строку четырьмя кавычками, например:

var myStringWithTripleQuotes = """" """ """";

Вам разрешено использовать более трех последовательных символов для начала и конца последовательности, чтобы поддерживать строковые литералы, содержащие три (или более) повторяющихся символа кавычек.

См. https://learn.microsoft.com/en-us/dotnet/csharp/programming-guide/strings/#raw-string-literals

Это здорово. Но я не могу использовать функции С# 11, так как в этом проекте используется .net 4.6. Я обновил свой ОП этой информацией.

Rivka 14.06.2023 18:51

@Rivka 4.6 полностью прекратил поддержку чуть более года назад, то есть прошло больше года с тех пор, как были доступны какие-либо исправления безопасности. Я знаю, что у вас может не быть контроля здесь, но вы должны стремиться получить как минимум 4.8, которая все еще получает исправления безопасности. 4.6-4.8 — довольно безболезненное обновление, не требующее никаких изменений в коде.

Joel Coehoorn 14.06.2023 18:57

@JoelCoehoorn Подойдет, спасибо.

Rivka 14.06.2023 18:59

4.8.1, 4.8 тоже не поддерживаются.

Tarazed 14.06.2023 19:46
Ответ принят как подходящий

Внутри литеральной строки (с префиксом @) вы можете избежать кавычек, удвоив их. Имейте в виду, что вам по-прежнему нужны открывающие и закрывающие кавычки, поэтому, если вам нужна строка, начинающаяся с 3 кавычек, у вас будет 7, как показано на рисунке:

var Query = @"""""""
  mutation {
      bulkOperationRunQuery(
      query 
      """"""
      {
  products {
    edges {
      node {
        id
        title
              }
    }
  }
}
""""""
      ) {
  bulkOperation {
    id
    status
      }
  userErrors
  {
    field
    message
      }
}
}
  """"""";

Удвоение внутренних кавычек до 6 сделало это для меня. Мне нужно было сохранить внешнюю кавычку как одну @" ...", иначе вывод содержал бы дополнительные начальные и конечные кавычки. Предполагая, что несоответствие - это моя версия .net/С#.

Rivka 15.06.2023 06:03

@Ривка звучит правильно. Это означало бы, что у вас есть 7 кавычек для создания 3 в строке в самом начале и в самом конце. У тех, что в середине строки, будет только 6, чтобы произвести 3.

Tarazed 15.06.2023 14:58

Другие вопросы по теме