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

萝らか妹 提交于 2019-12-14 03:53:10

问题


I am using Octokit.net version 0.9.0 (GitHub API for .NET) for getting zip contents of few repositories.

I already have the list of repositories I need but I am having trouble with getting the the content of the repositories as .zip files (called zipball)

What I've tried so far

// ... 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;

Problems with my attempts

  1. data is null
  2. responseData.GetType().Name says the responseData is of type string
  3. When I try Encoding.ASCII.GetBytes(response.HttpResponse.Body.ToString()); I get invalid zip file

Quesion

What is the correct way to get zipballs of repositories after being authenticated using Octokit.net library?

I've also opened an issue in octokit.net repository.


回答1:


After checking the source of Octokit I think this is not possible (as of version 0.10.0):

See 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);
}

The response body (responseData) is converted to an unicode string and, thus, it's mangled and not binary the same. See my PR792 (need to replace the if statement with if (contentType == null || (!contentType.StartsWith("image/") && !contentType.StartsWith("application/")))) to fix this (then it's a byte array. Writing possible using System.IO.File.WriteAllBytes("c:\\test.zip", (byte[])responseData);).



来源:https://stackoverflow.com/questions/29766916/cannot-get-repository-contents-as-zip-file-zipball-in-octokit-net

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!