Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/259.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 如何在c中从特定的GitHub repo(链接)获取文件列表#_C#_.net_Git_Github - Fatal编程技术网

C# 如何在c中从特定的GitHub repo(链接)获取文件列表#

C# 如何在c中从特定的GitHub repo(链接)获取文件列表#,c#,.net,git,github,C#,.net,Git,Github,如何从GitHub链接获取文件列表 例如,从这个GitHub存储库链接- 我们可以看到有SQL文本文件- 我想得到这些文件的列表- CorruptionIssues.sql DBAlert.sql DataBaseInfo.sql DatabaseDefaultLogin.sql DatabaseFiles.sql Deadlock.sql DefaultTrace.sql DiskInfo.sql InstalledPrograms.sql 等等,sql 感谢高级…您应该能够使用 通过

如何从GitHub链接获取文件列表

例如,从这个GitHub存储库链接-

我们可以看到有SQL文本文件-

我想得到这些文件的列表-

  • CorruptionIssues.sql
  • DBAlert.sql
  • DataBaseInfo.sql
  • DatabaseDefaultLogin.sql
  • DatabaseFiles.sql
  • Deadlock.sql
  • DefaultTrace.sql
  • DiskInfo.sql
  • InstalledPrograms.sql
  • 等等,sql

感谢高级…

您应该能够使用

通过提出如下请求:

curl https://api.github.com/repos/crs2007/ActiveReport/contents/ActiveReport
Github将返回包含目录内容的JSON

您可以通过多种方式在C#中实现这一点,建议您使用类似的方法,因为它们解决了您可能遇到的大多数问题。如果您不能使用外部库,下面的示例显示了如何使用普通HttpClient来实现相同的功能,尽管涉及的管道要多得多:

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.Credentials = ... // Set credentials 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}");
        }
    }
}
类程序
{
静态void Main()
{
Task.Factory.StartNew(异步()=>
{
var repoOwner=“crs2007”;
var repoName=“ActiveReport”;
var path=“ActiveReport”;
var httpClientResults=等待列表内容(repowner、repoName、path);
打印结果(“来自HttpClient”,httpClientResults);
var octokitfresults=wait ListContentsOctokit(repowner、repoName、path);
打印结果(“来自Octokit”,octokitResults);
}).Wait();
Console.ReadKey();
}
静态异步任务ListContents(字符串repoOwner、字符串repoName、字符串路径)
{
使用(var client=GetGithubHttpClient())
{
var resp=await client.GetAsync($“repos/{repowner}/{repoName}/contents/{path}”);
var bodyString=await resp.Content.ReadAsStringAsync();
var bodyJson=JToken.Parse(bodyString);
返回bodyJson.SelectTokens(“$.*].name”).Select(token=>token.Value());
}
}
静态异步任务ListContentsOctokit(字符串repoOwner、字符串repoName、字符串路径)
{
var client=new GitHubClient(new ProductHeaderValue(“Github API测试”);
//client.Credentials=…//在此处设置凭据,否则将应用苛刻的速率限制。
var contents=await client.Repository.Content.GetAllContents(repowner、repoName、path);
返回contents.Select(content=>content.Name);
}
私有静态HttpClient GetGithBubHttpClient()
{
返回新的HttpClient
{
BaseAddress=新Uri(“https://api.github.com"),
DefaultRequestHeader=
{
//注意:您必须在实际使用场景中设置身份验证令牌
//注意:如果没有它,您将受到苛刻的费率限制。
{“用户代理”,“Github API测试”}
}
};
}
静态void打印结果(字符串源、IEnumerable文件)
{
Console.WriteLine(源);
foreach(文件中的var文件)
{
WriteLine($“-{file}”);
}
}
}

问题是需要一个C#解决方案。看问题下面的标签。