C#调用GitHub API添加自定义Header无效问题求助
解决GitHub API无法识别自定义Time-Zone Header的问题
我来帮你搞定这个问题!GitHub API确实支持通过Time-Zone Header指定返回时间的时区,但你的代码可能在Header设置方式或格式上出了小问题,下面一步步排查和修正:
1. 用正确方式添加自定义Header
你用的HttpWebRequest直接通过索引赋值request.Headers["Time-Zone"],有时候会因为框架限制无法正确将Header加入请求。更可靠的做法是用Headers.Add()方法添加:
// 替换成你需要的标准时区名称,比如"Asia/Shanghai"或"America/New_York" request.Headers.Add("Time-Zone", "Asia/Shanghai");
2. 确认时区格式符合要求
GitHub API只接受IANA时区数据库中的标准时区名称,比如Asia/Shanghai、Europe/London这类,不能用GMT+8、UTC+5这类格式。格式不对的话,API会直接忽略这个Header,默认用UTC时区返回时间。
3. 验证请求是否真的发送了Header
可以用抓包工具(比如Fiddler)或Postman手动模拟请求:
- 调用目标GitHub API端点,手动添加
Time-Zone: Asia/ShanghaiHeader - 查看返回的提交时间是否符合指定时区,同时检查响应头里的
X-GitHub-Time-Zone字段,它会返回API实际使用的时区,确认是否和你设置的一致
4. 修正后的完整代码示例
这里补全并修正了你的代码,确保Header正确添加:
public string MakeRequestGitHub(string url, Dictionary<string, string> parameters = null) { // 先处理参数拼接(如果有) if (parameters != null && parameters.Count > 0) { string queryString = string.Join("&", parameters.Select(kvp => $"{Uri.EscapeDataString(kvp.Key)}={Uri.EscapeDataString(kvp.Value)}")); url = $"{url}?{queryString}"; } HttpWebRequest request = (HttpWebRequest)WebRequest.Create(url); request.ContentType = "application/vnd.github.v3+json"; request.Method = "GET"; request.UserAgent = "Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:60.0) Gecko/20100101 Firefox/60.0"; // 正确添加Time-Zone Header request.Headers.Add("Time-Zone", "Asia/Shanghai"); // 处理响应 using (HttpWebResponse response = (HttpWebResponse)request.GetResponse()) using (Stream stream = response.GetResponseStream()) using (StreamReader reader = new StreamReader(stream)) { return reader.ReadToEnd(); } }
额外提示
如果还是没生效,可以检查:
- 你调用的API端点是否支持
Time-ZoneHeader(大部分GitHub核心API端点都支持,比如提交、Issue、PR相关接口) - 有没有代理或防火墙拦截了自定义Header的传递
内容的提问来源于stack exchange,提问作者Antonin
相关产品推荐
相关产品推荐

