如何使用 API 和 c# 将文件从 azure DevOps 服务器下载到指定路径

How download file form azure DevOps sever to a specified path using API and c#

我正在尝试使用 API.API 从 azure devops 服务器下载文件并获得成功 response.But 没有文件获取 downloaded.If 我们删除格式参数,我们将收到文件 [= =23=] 单击该文件未下载。

示例代码

var personalaccesstoken = "ic2pqkzaeqv2dummyTokenDummypa";
                client1.BaseAddress = new Uri("https://dev.azure.com/organisatioTest/ProjectABC");
                client1.DefaultRequestHeaders.Accept.Clear();
                client1.DefaultRequestHeaders.Accept.Add(new MediaTypeWithQualityHeaderValue("application/json"));
                client1.DefaultRequestHeaders.Authorization = new AuthenticationHeaderValue("Basic",
                   Convert.ToBase64String(
                       System.Text.ASCIIEncoding.ASCII.GetBytes(
                           string.Format("{0}:{1}", "", personalaccesstoken))));
                HttpResponseMessage response1 = client1.GetAsync("_apis/git/repositories/e9e2f082-6f6d-99999b0bcc737a/items?scopePath=/Vjjj/DB/Data/ABC.sql&download=true&$format=zip&api-version=5.1").Result;

我们是否应该添加额外的 c# 代码来下载文件?如何指定下载路径?

在 C# 中,这个 URL 可以这样构造(假设变量是通过方法调用传入的):

    var url = $" https://dev.azure.com/{organization}/{project}/_apis/git/repositories/{repositoryId}/items?path={path}&api-version=5.1";

有了正确格式的 URL,我们就可以使用 WebRequest class 调用 API。例如:

var request = (HttpWebRequest)WebRequest.Create(address);
request.UserAgent = "VSTS-Get";
request.Headers.Set(HttpRequestHeader.Authorization, GetAuthenticationHeaderValue(authentication).ToString());
request.ContentType = "application/json";
request.Method = httpMethod;
response = (HttpWebResponse)request.GetResponse();

使用 HttpWebResponse object 我们可以获得一个 Stream object 然后我们可以使用它来将 API 结果写入本地文件。例如:

using (var responseStream = GetResponseStream(response))
{     var fileName = Path.Get Filename(fileToDownload ?? "");     using (var fileStream = File.Create(Path.Combine(destination, fileName)))     {         responseStream.CopyTo(fileStream);     }
}

请参阅此link了解更多详情:Get file API and sample blog

更新1

感谢sagar分享,更多详情请参考Download a file from azure devops server writes wrong data to the file

我们应该尝试使用个人访问令牌 (PAT)。为了使用 PAT 进行身份验证,我们必须使用授权作为“基本”而不是“承载”。更多而不是单独将 PAT 添加到请求 header 我们必须使用用户名和 PAT.Say base-64-encoded-string of username:PAT.

的组合

示例代码:

var personalaccesstoken = "wwwwwwwwwwwwwwwwwwy47b7ugkz32bubi64bw7fqdyfpa";
 var base64Creds = Convert.ToBase64String(Encoding.ASCII.GetBytes("SPabbbal@ABCTech.com:"+ personalaccesstoken));
request.Headers.Set(HttpRequestHeader.Authorization, "Basic " + base64Creds);