如何解决从azure devops服务器下载文件将错误数据写入文件
我正在尝试使用API从azure devops服务器下载文件,但是将带有注销链接的html页面源代码复制到该文件。我正在尝试下载sql文件。
C#代码
(list (list 1 2) (list 3 4))
不幸的是,我无法获得文件中的html内容
内容输出文件
var personalaccesstoken = "wwwwwwwwwwwwwwwwwwy47b7ugkz32bubi64bw7fqdyfpa";
var url = $"https://dev.azure.com/OrgTest/ABCProject/_apis/git/repositories/e9e2f082-99999iii-dummy-869b0bcc737a/items?path=/Versiondata/Datfile/ABC.sql&includeContent=true&api-version=5.1";
var request = (HttpWebRequest)WebRequest.Create(url);
request.UserAgent = "VSTS-Get";
request.Headers.Set(HttpRequestHeader.Authorization,"Bearer " + personalaccesstoken);
request.ContentType = "application/json";
request.Method = "GET";
request.AllowAutoRedirect = true;
var response = (HttpWebResponse)request.GetResponse();
using (var responseStream = response.GetResponseStream())
{
using (var filestream = File.Create(System.IO.Path.Combine("D:\\testFolder\\","ABC.sql")))
{
responseStream.CopyTo(filestream);
}
}
如何获取准确的输出。凭据和令牌相同。我尝试从下行下载。我面临着同样的问题。任何解决方案?我们应该在Azure devops服务器上的开发中向应用程序添加身份验证。
解决方法
最后,我找到了解决此问题的方法。在这里,我们尝试使用个人访问令牌(PAT)。为了使用PAT进行身份验证,我们必须将授权用作"Basic"
而不是"Bearer"
。除了将PAT单独添加到Request标头之外,我们还必须使用用户名和PAT的组合。说用户名:PAT的base-64编码字符串。
所需的代码更改
var personalaccesstoken = "wwwwwwwwwwwwwwwwwwy47b7ugkz32bubi64bw7fqdyfpa";
var base64Creds = Convert.ToBase64String(Encoding.ASCII.GetBytes("SPabbbal@ABCTech.com:"+ personalaccesstoken));
request.Headers.Set(HttpRequestHeader.Authorization,"Basic " + base64Creds);
感谢您的支持。
,您的PAT令牌是您的用户名+密码,并应用了范围(权限)。因此,在使用不记名令牌进行调用时,令牌的语法是用户名:令牌的Base64编码的字符串。由于令牌代表用户,因此未指定用户名,因此您可以指定一个空字符串。
public static async void GetBuilds()
{
try
{
var personalaccesstoken = "PATFROMWEB";
using (HttpClient client = new HttpClient())
{
client.DefaultRequestHeaders.Accept.Add(
new System.Net.Http.Headers.MediaTypeWithQualityHeaderValue("application/json"));
client.DefaultRequestHeaders.Authorization = new AuthenticationHeaderValue("Basic",Convert.ToBase64String(
System.Text.ASCIIEncoding.ASCII.GetBytes(
string.Format("{0}:{1}","",personalaccesstoken))));
using (HttpResponseMessage response = client.GetAsync(
"https://dev.azure.com/{organization}/{project}/_apis/build/builds?api-version=5.0").Result)
{
response.EnsureSuccessStatusCode();
string responseBody = await response.Content.ReadAsStringAsync();
Console.WriteLine(responseBody);
}
}
}
catch (Exception ex)
{
Console.WriteLine(ex.ToString());
}
}
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。