Можете ли вы использовать необработанный синтаксис graphQL для запроса github API v4 в C# с помощью библиотеки octokit.net?

Я пытаюсь использовать graphQL для запросов к репозиториям и их содержимому, но не могу понять, как создать нужный запрос в LinQ. Можно ли как-нибудь выполнить необработанный запрос GraphQL, избегая синтаксиса LinQ?

Мой функциональный запрос GraphQL выглядит так:

{
  repositoryOwner(login: "userLogin") {
    repositories(first: 99) {
      nodes {
        name
        rootFolder: object(expression: "master:") {
          id
          ... on Tree {
            entries {
              name
              object {
                ... on Blob {
                  byteSize
                }
              }
            }
          }
        }
      }
    }
  }
}

Используя синтаксис LinQ, я дошел до этого:

var query = new Query()
   .RepositoryOwner("userLogin")
   .Repositories(first: 99)
   .Nodes.Select(repo => new
   {
       repo.Name
   }).Compile();

var result = await connection.Run(query);

И я не могу найти способ реализовать это... на селекторах Blob

0 ответов

Вы можете использовать GraphQl.Client пакет nuget и используйте необработанный запрос graphql:

var client = new GraphQLClient("https://api.github.com/graphql");
client.DefaultRequestHeaders.Add("Authorization", $"bearer {token}");
client.DefaultRequestHeaders.Add("User-Agent", userLogin );
var result = await client.PostQueryAsync(@"{
  repositoryOwner(login: """ + userLogin + @""") {
    repositories(first: 99) {
      nodes {
        name
        rootFolder: object(expression: ""master:"") {
          id
          ... on Tree {
            entries {
              name
              object {
                ... on Blob {
                  byteSize
                }
              }
            }
          }
        }
      }
    }
  }
}");

а затем получить доступ к результату примерно так:

var size = result.Data.repositoryOwner.repositories.nodes[0].rootFolder.entries[0].@object.byteSize;
Другие вопросы по тегам