从TFS迁移至Git时调用Azure DevOps API返回203状态码求助
解决Azure DevOps API请求返回203状态码的问题
203状态码表示服务器返回的是非授权信息,你的代码请求未携带Azure DevOps要求的认证凭证。浏览器能正常访问是因为已经保存了你的登录会话,自动附带了认证信息,而HttpClient默认不会自动添加这些凭证。
方案一:使用个人访问令牌(PAT)认证
- 在Azure DevOps中生成个人访问令牌(PAT),确保令牌拥有Git仓库读取权限。
- 在代码中添加Basic认证头,将PAT转换为Base64编码的凭证:
using System.Net.Http.Headers; using System.Text; var client = new HttpClient(); string pat = "你的PAT令牌"; string url = "https://dev.azure.com/pragmalogicdev/apps/_apis/git/repositories"; // 构造Basic认证头 var credentials = Convert.ToBase64String(Encoding.ASCII.GetBytes($":{pat}")); client.DefaultRequestHeaders.Authorization = new AuthenticationHeaderValue("Basic", credentials); var response = client.GetAsync(url).Result; string resultStr = client.GetStringAsync(url).Result;
方案二:使用Windows集成认证(域环境下适用)
如果你的机器加入了域,且Azure DevOps支持Windows身份验证,可以通过HttpClientHandler启用默认凭证:
using System.Net.Http; var handler = new HttpClientHandler { UseDefaultCredentials = true }; var client = new HttpClient(handler); string url = "https://dev.azure.com/pragmalogicdev/apps/_apis/git/repositories"; var response = client.GetAsync(url).Result; string resultStr = client.GetStringAsync(url).Result;
优化建议:使用异步请求代替同步阻塞
避免使用.Result导致线程阻塞,推荐使用async/await模式:
using System.Net.Http.Headers; using System.Text; var client = new HttpClient(); string pat = "你的PAT令牌"; string url = "https://dev.azure.com/pragmalogicdev/apps/_apis/git/repositories"; var credentials = Convert.ToBase64String(Encoding.ASCII.GetBytes($":{pat}")); client.DefaultRequestHeaders.Authorization = new AuthenticationHeaderValue("Basic", credentials); var response = await client.GetAsync(url); response.EnsureSuccessStatusCode(); // 抛出请求失败的异常 string resultStr = await client.GetStringAsync(url);
内容的提问来源于stack exchange,提问作者CorBins
相关产品推荐
相关产品推荐

