1

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

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

发布 zip 位于 Github Enterprise Repository 上,因此它们需要身份验证。这可能是我的问题,我无法使用 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,我在代码中没有发现。

4

1 回答 1

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}";
于 2021-04-25T20:04:43.007 回答