问题描述
我正在Visual Studio中使用Windows Forms C#开发(太新了)应用程序,我需要从GitLab项目中获取特定的提交。
我已经看到了许多有关GitHub的示例。我已经尝试过这种方式(不知道是否正确):
使用7位SHA1在特定提交时下载存储库:
var Token = "xxxx";
var url = "http://{my_domain}/{user}/{project_name}/repository/archive/{shor_id}.zip";
var path = @"C:\GitLab\My_Projects";
try
{
using (var client = new System.Net.Http.HttpClient())
{
var credentials = string.Format(System.Globalization.CultureInfo.InvariantCulture,"{0}:",Token);
credentials = Convert.ToBase64String(System.Text.Encoding.ASCII.GetBytes(credentials));
client.DefaultRequestHeaders.Authorization = new System.Net.Http.Headers.AuthenticationHeaderValue("Basic",credentials);
var contents = client.GetByteArrayAsync(url).Result;
System.IO.File.WriteallBytes(path,contents);
}
}
catch (System.UnauthorizedAccessException)
{
backgroundWorker1.CancelAsync();
Console.WriteLine("Problem downloading");
}
但是我得到这个错误:
'System.UnauthorizedAccessException' in mscorlib.dll. Access denied to 'C:\GitLab\My_Projects'.
正如我之前所说,我是新来的,可能会说些愚蠢的事,对不起。 如果有人知道这个主题,我很乐意为您解释或帮助我解决这个问题。
解决方法
最后,我实现了解决方案。我使用GitLab API进行了另一个指导。 如果有人想看看我到达的结果,这里有代码:
var url_sha = $"http://{my_gitlab_domain}/api/v4/projects/{id_project}/repository/archive.zip?
private_token={my_token}&sha={short_id_commit}";
var client = new HttpClient();
var response = await client.GetAsync(url_sha);
var local_path = @"C:\GitLab\My_Projects";
using (var stream = await response.Content.ReadAsStreamAsync())
{
var fileInfo = new FileInfo(local_path + ".zip");
using (var fileStream = fileInfo.OpenWrite())
{
await stream.CopyToAsync(fileStream);
}
}