在 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;
我的尝试有问题
data
为空
responseData.GetType().Name
表示 responseData
是字符串类型
- 当我尝试
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);
编写)。
我正在使用 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;
我的尝试有问题
data
为空responseData.GetType().Name
表示responseData
是字符串类型- 当我尝试
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);
编写)。