如何使用 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);
我正在尝试使用 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);