问题描述
我想在 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,我没有在代码中找到。
解决方法
根据文档 (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}";