Я пытаюсь запустить 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. Есть ли другой способ сделать это?
@flq Удвоение сработало. Я отметил сообщение с вашим же предложением, что и ответ.





Вместо экранирования """ начинайте и заканчивайте строку четырьмя кавычками, например:
var myStringWithTripleQuotes = """" """ """";
Вам разрешено использовать более трех последовательных символов для начала и конца последовательности, чтобы поддерживать строковые литералы, содержащие три (или более) повторяющихся символа кавычек.
См. https://learn.microsoft.com/en-us/dotnet/csharp/programming-guide/strings/#raw-string-literals
Это здорово. Но я не могу использовать функции С# 11, так как в этом проекте используется .net 4.6. Я обновил свой ОП этой информацией.
@Rivka 4.6 полностью прекратил поддержку чуть более года назад, то есть прошло больше года с тех пор, как были доступны какие-либо исправления безопасности. Я знаю, что у вас может не быть контроля здесь, но вы должны стремиться получить как минимум 4.8, которая все еще получает исправления безопасности. 4.6-4.8 — довольно безболезненное обновление, не требующее никаких изменений в коде.
@JoelCoehoorn Подойдет, спасибо.
4.8.1, 4.8 тоже не поддерживаются.
Внутри литеральной строки (с префиксом @) вы можете избежать кавычек, удвоив их. Имейте в виду, что вам по-прежнему нужны открывающие и закрывающие кавычки, поэтому, если вам нужна строка, начинающаяся с 3 кавычек, у вас будет 7, как показано на рисунке:
var Query = @"""""""
mutation {
bulkOperationRunQuery(
query
""""""
{
products {
edges {
node {
id
title
}
}
}
}
""""""
) {
bulkOperation {
id
status
}
userErrors
{
field
message
}
}
}
""""""";
Удвоение внутренних кавычек до 6 сделало это для меня. Мне нужно было сохранить внешнюю кавычку как одну @" ...", иначе вывод содержал бы дополнительные начальные и конечные кавычки. Предполагая, что несоответствие - это моя версия .net/С#.
@Ривка звучит правильно. Это означало бы, что у вас есть 7 кавычек для создания 3 в строке в самом начале и в самом конце. У тех, что в середине строки, будет только 6, чтобы произвести 3.
Iirc цитата экранируется путем написания двух кавычек, поэтому три должно быть как шесть?