VS2019 C# .NET Framework 4.6环境下WebClient无法下载api.github.com接口问题
问题根因
GitHub REST API对所有请求强制要求携带User-Agent请求头,无该头或者头内容为空的请求会被直接拦截返回错误,这是你请求api.github.com失败、但可以下载其他GitHub资源的核心原因(raw等静态资源服务没有该强制校验规则)。
修复后的代码
using System.Net; // .NET Framework 4.6环境下建议仅保留受GitHub支持的TLS版本,SSL3、TLS1.0、TLS1.1已被GitHub弃用 ServicePointManager.Expect100Continue = true; ServicePointManager.SecurityProtocol = SecurityProtocolType.Tls12; WebClient wc = new WebClient(); // 必须添加User-Agent头,内容可自定义为你的应用名、仓库地址等任意非空字符串 wc.Headers.Add("User-Agent", "MyAppUpdateChecker/1.0"); wc.DownloadFile(new System.Uri("https://api.github.com/repos/[Username]/[Reponame]/releases/latest"), "name.json");
额外优化建议
- 新开发功能建议优先使用
HttpClient替代WebClient,WebClient在.NET平台已经被标记为过时类,HttpClient性能和可配置性更好,且默认兼容现代API请求规范 - 若后续升级到更高版本.NET Framework或者.NET Core/.NET 5+,可以新增
SecurityProtocolType.Tls13支持,进一步提升请求安全性 - 公开仓库调用GitHub API无需认证,但未认证的请求有每小时60次的速率限制,如果你有高频调用需求,可以生成个人访问令牌(PAT)加入请求头提升限额
内容的提问来源于stack exchange,提问作者HimDek
相关产品推荐
相关产品推荐

