Cómo get una list de files de un repository GitHub específico (Enlace) en c #

¿Cómo puedo get una list de files del enlace de GitHub?

Por ejemplo, desde este enlace del repository de GitHub – https://github.com/crs2007/ActiveReport/tree/master/ActiveReport/SQLFiles

Podemos ver que hay files de text SQL – página GitHub con los files relevantes (Pic)

Me gustaría get una list de estos files:

  • CorruptionIssues.sql
  • DBAlert.sql
  • DataBaseInfo.sql
  • DatabaseDefaultLogin.sql
  • DatabaseFiles.sql
  • Deadlock.sql
  • DefaultTrace.sql
  • DiskInfo.sql
  • InstalledPrograms.sql
  • .etc … sql

Gracias de antemano…

Debería poder usar la API de contenido GitHub

Al hacer una request como:

curl https://api.github.com/repos/crs2007/ActiveReport/contents/ActiveReport 

Github devolverá JSON con los contenidos del directory.

Puede hacer esto en C # de múltiples maneras, probablemente se recomienda usar algo como Octokit, ya que resuelven la mayoría de los problemas que probablemente encuentre. En caso de que no pueda usar una biblioteca externa, el siguiente ejemplo muestra cómo usar HttpClient simple para lograr lo mismo, aunque con mucha más plomería involucrada:

 class Program { static void Main() { Task.Factory.StartNew(async () => { var repoOwner = "crs2007"; var repoName = "ActiveReport"; var path = "ActiveReport"; var httpClientResults = await ListContents(repoOwner, repoName, path); PrintResults("From HttpClient", httpClientResults); var octokitResults = await ListContentsOctokit(repoOwner, repoName, path); PrintResults("From Octokit", octokitResults); }).Wait(); Console.ReadKey(); } static async Task<IEnumerable<string>> ListContents(string repoOwner, string repoName, string path) { using (var client = GetGithubHttpClient()) { var resp = await client.GetAsync($"repos/{repoOwner}/{repoName}/contents/{path}"); var bodyString = await resp.Content.ReadAsStringAsync(); var bodyJson = JToken.Parse(bodyString); return bodyJson.SelectTokens("$.[*].name").Select(token => token.Value<string>()); } } static async Task<IEnumerable<string>> ListContentsOctokit(string repoOwner, string repoName, string path) { var client = new GitHubClient(new ProductHeaderValue("Github-API-Test")); // client.Cnetworkingentials = ... // Set cnetworkingentials here, otherwise harsh rate limits apply. var contents = await client.Repository.Content.GetAllContents(repoOwner, repoName, path); return contents.Select(content => content.Name); } private static HttpClient GetGithubHttpClient() { return new HttpClient { BaseAddress = new Uri("https://api.github.com"), DefaultRequestHeaders = { // NOTE: You'll have to set up Authentication tokens in real use scenario // NOTE: as without it you're subject to harsh rate limits. {"User-Agent", "Github-API-Test"} } }; } static void PrintResults(string source, IEnumerable<string> files) { Console.WriteLine(source); foreach (var file in files) { Console.WriteLine($" -{file}"); } } }