我使用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类型代码,我猜这是身份验证网站的一部分
答案 0 :(得分:0)
返回大量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),其用户名已知,并且密码组合,看看是否适合您。