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

使用Zenhub API将Github Issue转为Epic时遇参数错误问题

解决Zenhub API关联Issue到Epic时的400错误问题

我之前也踩过Zenhub API这个坑!你遇到的400错误根本不是字段名的问题,而是请求数据的格式不对——你现在用data=params传递字典参数,requests会默认把它编码成application/x-www-form-urlencoded的表单格式,但Zenhub的API要求接收的是JSON格式的请求体,所以才会抛出“无效字段”的错误。

问题根源

当你传递params = {"issues": [{"repo_id": 280565, "issue_number": 17}]}给data参数时,requests会把它转换成这样的扁平表单数据:

issues=repo_id&issues=issue_number

这种格式完全不符合Zenhub API期望的嵌套JSON结构,自然会被判定为无效字段。

修正后的代码

你只需要把参数通过json参数传递(或者手动序列化JSON并设置正确请求头),就能解决这个问题:

1. 转换Issue为Epic并关联Issue

import requests

zenhub_headers = {
    "X-Authentication-Token": "%s" % token,
    "Content-Type": "application/json"  # 用json参数时requests会自动添加,显式指定也可
}
target_zh_issues_url = '%s/p1/repositories/%d/issues' % (zh_api_endpoint, target_repo_id)
params = {"issues": [{"repo_id": 280565, "issue_number": 17}]}

# 使用json参数传递,requests会自动处理JSON序列化和请求头
response = requests.post(
    f"{target_zh_issues_url}/{issue}/convert_to_epic",
    headers=zenhub_headers,
    json=params
)

2. 给已存在的Epic添加关联Issue

target_zh_epics_url = '%s/p1/repositories/%d/epics' % (zh_api_endpoint, target_repo_id)
params = {"add_issues": [{"repo_id": 280565, "issue_number": 17}]}

response = requests.post(
    f"{target_zh_epics_url}/{issue}/update_issues",
    headers=zenhub_headers,
    json=params
)

额外验证点

如果还是报错,可以检查这几点:

  • 确认你的token有足够权限操作目标仓库的Epic
  • 确认repo_id和issue_number对应的仓库和Issue真实存在
  • 检查API端点zh_api_endpoint是否为正确的地址(比如https://api.zenhub.com)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.15 03:36:20