[英]Authorizing in azure devops rest API
我使用azure devops api进行统计,但是发送标头时无法在c#中进行身份验证。
我使用webrequests。
经过一堆测试后,我去了邮递员对其进行测试,我可以使用用户名和密码进入,所以我复制了授权头饰,因为我确实从服务器取回了信息,所以这种授权头是100%有效的。
var httpWebRequest = (HttpWebRequest)WebRequest.Create(url);
httpWebRequest.Method = "GET";
httpWebRequest.Headers.Add("Authorization:Basic base64Username:password");
var httpResponse = (HttpWebResponse)httpWebRequest.GetResponse();
using (var streamReader = new StreamReader(httpResponse.GetResponseStream()))
{
result = streamReader.ReadToEnd();
Console.WriteLine(result);
}
在C#中,所有即时通讯都会得到响应,这是一堆完整的html类型代码,我猜这是身份验证网站的一部分
返回大量HTML的事实表明您没有以正确的方式形成基本的auth标头,或者无法识别您提供的用户名。 从代码示例中还不清楚这是什么,但是如果您提供的格式正确的auth头具有无效的凭据,则会收到401 Unauthorized
响应, HttpWebRequest
类将其作为异常抛出。
检查两件事:
确保您正确地形成了auth标头(这几乎可以肯定,从您的问题中尚不清楚您是如何从邮递员复制它或尝试在C#中生成它的)
确保您的凭据有效。
我已将您的代码段调整为明确有关正确形成标头的内容:
var base64Creds = Convert.ToBase64String(Encoding.ASCII.GetBytes("username:password"));
var httpWebRequest = (HttpWebRequest)WebRequest.Create(url);
httpWebRequest.Method = "GET";
httpWebRequest.Headers.Add($"Authorization: Basic {base64Creds}");
var httpResponse = (HttpWebResponse)httpWebRequest.GetResponse();
using (var streamReader = new StreamReader(httpResponse.GetResponseStream()))
{
var result = streamReader.ReadToEnd();
Console.WriteLine(result);
}
如果以上代码段不适用于您的主要用户名和密码,则作为最后的选择,您可以尝试设置备用凭据:( https://dev.azure.com/ {organisation} / _ usersSettings / altcreds)用户名和密码组合,看看是否适合您。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.