You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

从TFS迁移至Git时调用Azure DevOps API返回203状态码求助

解决Azure DevOps API请求返回203状态码的问题

203状态码表示服务器返回的是非授权信息,你的代码请求未携带Azure DevOps要求的认证凭证。浏览器能正常访问是因为已经保存了你的登录会话,自动附带了认证信息,而HttpClient默认不会自动添加这些凭证。

方案一:使用个人访问令牌(PAT)认证

  1. 在Azure DevOps中生成个人访问令牌(PAT),确保令牌拥有Git仓库读取权限。
  2. 在代码中添加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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.16 10:35:29