C#:从 Github 下载发布资源

时间:2021-04-25 19:52:08

标签: c# github dotnet-httpclient octokit.net

我想在 C# 应用程序中下载发布资产 zipball 以供进一步使用。 我正在使用 Octokit 从 repo 中获取所有发布信息,包括相应的 browserdownload_url。

经过一些研究,在我看来,您无法通过 octokit 下载此发行版资产 zip,因此尝试按照一些 SO 帖子的建议使用 httpclient,这些帖子提出了这些问题。

发布 zip 位于 Github Enterprise 存储库中,因此它们需要身份验证。 这可能是我的问题,我无法使用 httpClient 进行身份验证...

请求总是以代码 404 响应 (如果您尝试将 url 放入常规浏览器而不登录,这是常规行为)

我的实际实现是这样的

public void DownloadRelease(string dlUrl, string targetPath)
{
    var githubToken = "aaaaaaaaaaabbbbbbbbbcccccccccdddddddddd";   //Token created in the github developer settings with all available rights

    //dlUrl = https://github.server.de/organization/project/releases/download/v1.2.34/release.zip

    using (var client = new System.Net.Http.HttpClient())
    {
        var credentials = string.Format(System.Globalization.CultureInfo.InvariantCulture, "{0}:", githubToken);
        credentials = Convert.ToBase64String(System.Text.Encoding.ASCII.GetBytes(credentials));
        client.DefaultRequestHeaders.Authorization = new System.Net.Http.Headers.AuthenticationHeaderValue("Basic", credentials);
        //client.DefaultRequestHeaders.Authorization = new AuthenticationHeaderValue("Bearer", githubToken);
        var contents = client.GetByteArrayAsync(dlUrl).Result;
        System.IO.File.WriteAllBytes(targetPath, contents);
    }
}

更新: 最后我们按照使用curl方式的方式: https://docs.github.com/en/enterprise-server@3.0/rest/reference/repos#download-a-repository-archive-zip

我还有一个错误:有些版本没有可下载的资产 ID,我没有在代码中找到。

1 个答案:

答案 0 :(得分:1)

根据文档 (https://docs.github.com/en/enterprise-server@2.22/rest/overview/other-authentication-methods#via-oauth-and-personal-access-tokens),我最好的猜测是,您的凭据是错误的。

文档说,格式应该是 username:token,但您只使用 token 后跟冒号 : - 这对我来说也不合适。

所以本质上你需要稍微重构你的凭据变量:

var credentials = $"{username}:{githubToken}";