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

使用C#调用GitHub API获取仓库内容时遇403错误求助

问题:GitHub API调用C#代码返回403,curl却正常

尝试通过GitHub API获取Arcadix/Product.Fusion仓库内容时,curl命令可正常获取数据,但相同逻辑的C#代码触发403错误。

可正常工作的curl命令

curl -L -H "Accept: application/vnd.github+json" -H "Authorization: Bearer <my_token>" -H "X-GitHub-Api-Version: 2022-11-28" https://api.github.com/repos/Arcadix/Product.Fusion/contents

触发403的C#代码

var httpClient = new HttpClient();
httpClient.DefaultRequestHeaders.Authorization = new AuthenticationHeaderValue("Bearer", "token123"); // token123已替换为实际令牌
httpClient.DefaultRequestHeaders.Add("Accept", "application/vnd.github+json");
httpClient.DefaultRequestHeaders.Add("X-GitHub-Api-Version", "2022-11-28");
var contentsUrl = $"https://api.github.com/repos/Arcadix/Product.Fusion/contents";
var contentsJson = httpClient.GetStringAsync(contentsUrl).Result;
Console.WriteLine(contentsJson);

解决办法

1. 添加必填的User-Agent请求头

GitHub API强制要求所有请求包含User-Agent头,curl会自动生成类似curl/7.81.0的标识,但HttpClient默认不设置该头,这是导致403的核心原因。修改代码添加User-Agent:

httpClient.DefaultRequestHeaders.UserAgent.ParseAdd("MyApp/1.0"); // 替换为你的应用标识,格式无严格要求

2. 改用异步方式调用

使用.Result同步阻塞异步方法可能引发死锁或异常行为,建议使用标准的async/await模式:

static async Task Main()
{
    var httpClient = new HttpClient();
    httpClient.DefaultRequestHeaders.Authorization = new AuthenticationHeaderValue("Bearer", "你的实际令牌");
    httpClient.DefaultRequestHeaders.Add("Accept", "application/vnd.github+json");
    httpClient.DefaultRequestHeaders.Add("X-GitHub-Api-Version", "2022-11-28");
    httpClient.DefaultRequestHeaders.UserAgent.ParseAdd("MyApp/1.0");
    
    var contentsUrl = "https://api.github.com/repos/Arcadix/Product.Fusion/contents";
    var contentsJson = await httpClient.GetStringAsync(contentsUrl);
    Console.WriteLine(contentsJson);
}

3. 验证令牌与仓库权限

  • 确认GitHub令牌拥有repo权限(若仓库为私有)
  • 确认你有权限访问Arcadix/Product.Fusion仓库

内容的提问来源于stack exchange,提问作者Arun kumar

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.19 05:00:12