C#:从Github下载发布资产

C#:从Github下载发布资产,c#,github,dotnet-httpclient,octokit.net,C#,Github,Dotnet Httpclient,Octokit.net,我想在C#应用程序中下载发布资产zipball,以供进一步使用。 我使用Octokit从回购协议中获取所有发布信息,包括相应的浏览器下载url 经过一些研究后,我觉得你不能通过octokit下载这个发布资产zip,所以按照一些提出这些问题的so帖子的建议尝试使用httpclient 发行版zip位于Github企业存储库中,因此需要身份验证。 这可能是我的问题,我无法使验证与httpClient一起工作 请求总是以代码404响应 (如果您尝试在不登录的情况下将url放入常规浏览器,这是常规行为)

我想在C#应用程序中下载发布资产zipball,以供进一步使用。 我使用Octokit从回购协议中获取所有发布信息,包括相应的浏览器下载url

经过一些研究后,我觉得你不能通过octokit下载这个发布资产zip,所以按照一些提出这些问题的so帖子的建议尝试使用httpclient

发行版zip位于Github企业存储库中,因此需要身份验证。 这可能是我的问题,我无法使验证与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);
    }
}
更新: 最后,我们采用了卷曲法:


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

根据文档()我最好的猜测是,您的凭据是错误的

文档中说,格式应该是
用户名:token
,但您只使用
token
,后面跟一个冒号
——我也不这么认为

因此,本质上您需要稍微重构您的凭证变量:

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

您也可以尝试使用PAT作为密码的空白用户名。我已经成功地使用了这种格式的github API。但是不要把PAT作为用户名谢谢你的建议。不幸的是,它在我这方面没有起作用。这似乎是一个普遍的问题。curl和gitlab cl也不走运,curls给出了OK 200响应,但仍然没有传输数据。。。因此,该主题现在由技术支持人员处理。@Metal24当您找到解决方案时,请确保将其发布在此处。它将来可能会帮助别人。祝你好运