从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编码的字符串。由于令牌代表用户,因此未指定用户名,因此您可以指定一个空字符串。

来自:Use a PAT in your code

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());
    }
}

相关问答

依赖报错 idea导入项目后依赖报错,解决方案:https://blog....
错误1:代码生成器依赖和mybatis依赖冲突 启动项目时报错如下...
错误1:gradle项目控制台输出为乱码 # 解决方案:https://bl...
错误还原:在查询的过程中,传入的workType为0时,该条件不起...
报错如下,gcc版本太低 ^ server.c:5346:31: 错误:‘struct...