使用 Octokit.net 从私有 GitHub 存储库版本下载资产
Download asset from private GitHub repository release with Octokit.net
我正在尝试从我的私人 github 存储库下载最新的资产,但每次我都收到 404 错误,这是我的代码:
// Initializes a GitHubClient
GitHubClient client = new GitHubClient(new ProductHeaderValue("MyClient"));
client.Credentials = new Credentials("my-token");
// Gets the latest release
Release latestRelease = client.Repository.Release.GetLatest("owner", "repo").Result;
string downloadUrl = latestRelease.Assets[0].BrowserDownloadUrl;
// Download with WebClient
using var webClient = new WebClient();
webClient.Headers.Add(HttpRequestHeader.UserAgent, "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/70.0.3538.77 Safari/537.36");
webClient.Headers.Add(HttpRequestHeader.Authorization, $"token {my-token}");
webClient.DownloadFileAsync(new Uri(downloadUrl), @"F:\Path\For\Storing\My\File.zip");
// this line creates the .zip file, but is always 0KB
我试过了 -
- 添加“接受:application/octet-stream”header;
- 使用“用户名:密码”作为授权header;
- (坏主意,永远不要这样做!!!) 授予令牌的完整范围
其中 none 有效。
P.S。我知道 Whosebug 上有无数类似的问题,但 none 其中对我有用,我已经苦苦挣扎了数周。
所以我终于想通了。您应该使用 GitHub REST Api 下载文件,而不是直接 link.
GET /repos/owner/repository/releases/assets/<asset_id>
更新后的代码如下:
// Initializes a GitHubClient
GitHubClient client = new GitHubClient(new ProductHeaderValue("MyClient"));
client.Credentials = new Credentials("my-token");
// Gets the latest release
Release latestRelease = client.Repository.Release.GetLatest("owner", "repo").Result;
int assetId = latestRelease.Assets[0].Id;
string downloadUrl = $"https://api.github.com/repos/owner/repository/releases/assets/{assetId}";
// Download with WebClient
using var webClient = new WebClient();
webClient.Headers.Add(HttpRequestHeader.UserAgent, "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/70.0.3538.77 Safari/537.36");
webClient.Headers.Add(HttpRequestHeader.Authorization, "token my-token");
webClient.Heasers.Add(HttpRequestHeader.Accept, "application/octet-stream");
// Download the file
webClient.DownloadFileAsync(downloadUrl, "C:/Path/To/File.zip");
我正在尝试从我的私人 github 存储库下载最新的资产,但每次我都收到 404 错误,这是我的代码:
// Initializes a GitHubClient
GitHubClient client = new GitHubClient(new ProductHeaderValue("MyClient"));
client.Credentials = new Credentials("my-token");
// Gets the latest release
Release latestRelease = client.Repository.Release.GetLatest("owner", "repo").Result;
string downloadUrl = latestRelease.Assets[0].BrowserDownloadUrl;
// Download with WebClient
using var webClient = new WebClient();
webClient.Headers.Add(HttpRequestHeader.UserAgent, "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/70.0.3538.77 Safari/537.36");
webClient.Headers.Add(HttpRequestHeader.Authorization, $"token {my-token}");
webClient.DownloadFileAsync(new Uri(downloadUrl), @"F:\Path\For\Storing\My\File.zip");
// this line creates the .zip file, but is always 0KB
我试过了 -
- 添加“接受:application/octet-stream”header;
- 使用“用户名:密码”作为授权header;
- (坏主意,永远不要这样做!!!) 授予令牌的完整范围 其中 none 有效。
P.S。我知道 Whosebug 上有无数类似的问题,但 none 其中对我有用,我已经苦苦挣扎了数周。
所以我终于想通了。您应该使用 GitHub REST Api 下载文件,而不是直接 link.
GET /repos/owner/repository/releases/assets/<asset_id>
更新后的代码如下:
// Initializes a GitHubClient
GitHubClient client = new GitHubClient(new ProductHeaderValue("MyClient"));
client.Credentials = new Credentials("my-token");
// Gets the latest release
Release latestRelease = client.Repository.Release.GetLatest("owner", "repo").Result;
int assetId = latestRelease.Assets[0].Id;
string downloadUrl = $"https://api.github.com/repos/owner/repository/releases/assets/{assetId}";
// Download with WebClient
using var webClient = new WebClient();
webClient.Headers.Add(HttpRequestHeader.UserAgent, "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/70.0.3538.77 Safari/537.36");
webClient.Headers.Add(HttpRequestHeader.Authorization, "token my-token");
webClient.Heasers.Add(HttpRequestHeader.Accept, "application/octet-stream");
// Download the file
webClient.DownloadFileAsync(downloadUrl, "C:/Path/To/File.zip");