在 Octokit.net 中无法将存储库内容作为 .zip 文件 (zipball)

Cannot get repository contents as .zip file (zipball) in Octokit.net

我正在使用 Octokit.net version 0.9.0(GitHub API for .NET)来获取几个存储库的 zip 内容。

我已经有了我需要的存储库列表,但我无法将存储库的内容作为 .zip 文件(称为 zipball)获取

到目前为止我尝试了什么

// ... client = new Client(...);
// some authentication logic...
// some other queries to GitHub that work correctly
var url = "https://api.github.com/repos/SomeUser/SomeRepo/zipball";
var response = await this.client.Connection.Get<byte[]>(
        new Uri(url),
        new Dictionary<string, string>(),
        null);
var data = response.Body;
var responseData = response.HttpResponse.Body;

我的尝试有问题​​

  1. data 为空
  2. responseData.GetType().Name 表示 responseData 是字符串类型
  3. 当我尝试 Encoding.ASCII.GetBytes(response.HttpResponse.Body.ToString()); 我得到无效的 zip 文件

问题

使用 Octokit.net 库进行身份验证后获取存储库 zipball 的正确方法是什么?

我还在 octokit.net 存储库中打开了 an issue

在检查了 Octokit 的源代码后,我认为这是不可能的(从版本 0.10.0 开始):

Octokit\Http\HttpClientAdapter.cs

// We added support for downloading images. Let's constrain this appropriately.
if (contentType == null || !contentType.StartsWith("image/"))
{
    responseBody = await responseMessage.Content.ReadAsStringAsync().ConfigureAwait(false);
}
else
{
    responseBody = await responseMessage.Content.ReadAsByteArrayAsync().ConfigureAwait(false);
}

响应正文 (responseData) 被转换为 unicode 字符串,因此,它被损坏而不是二进制的。请参阅我的 PR792(需要将 if 语句替换为 if (contentType == null || (!contentType.StartsWith("image/") && !contentType.StartsWith("application/"))))来解决此问题(然后它是一个字节数组。可以使用 System.IO.File.WriteAllBytes("c:\test.zip", (byte[])responseData); 编写)。