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

Azure DevOps调用WIQL查询工作项返回400错误及无ID查询方法咨询

问题解决方法

错误根因

你遇到的400报错是请求体格式错误导致的:你在请求头中声明了Content-Type: application/json,但调用requests.post时使用data参数传递字典类型的payload,requests会默认将payload转为表单编码格式(格式为query=xxx),接口收到后按JSON解析失败,就会返回解析到意外字符q的报错。

修复方案1:调整现有requests请求

将data=payload改为json=payload即可,requests会自动将字典序列化为JSON字符串,和请求头要求的格式匹配。修改后的请求代码如下:

# 其余代码保持不变
response = requests.post(
    url="https://dev.azure.com/dev/Agile_Board/_apis/wit/wiql?api-version=5.1", 
    headers=headers, 
    json=payload
)

如果调整参数后仍有问题,可先校验你的WIQL语句是否符合Azure DevOps的查询规则,确认当前写的关联查询是否匹配实际业务需求。

修复方案2:使用官方Azure DevOps SDK(更推荐)

你已经导入了azure-devops官方SDK,直接用SDK调用更稳定,不需要自己处理鉴权、序列化的逻辑,示例代码如下:

from azure.devops.connection import Connection
from azure.devops.v5_1.work_item_tracking.models import Wiql
from msrest.authentication import BasicAuthentication

organization = "https://dev.azure.com/dev"
pat = 'ey3nbq'
credentials = BasicAuthentication('', pat)
connection = Connection(base_url=organization, creds=credentials)
wit_client = connection.clients.get_work_item_tracking_client()

# 构造WIQL查询
wiql = Wiql(
    query="SELECT [System.Id] FROM workitemLinks WHERE ([Source].[System.WorkItemType] = 'Task') AND ([System.Links.LinkType] = 'System.LinkTypes.Hierarchy-Reverse') AND ([Target].[System.WorkItemType] = 'User Story') MODE (DoesNotContain)"
)

# 执行查询
query_result = wit_client.query_by_wiql(wiql, project='Agile_Board')
# 输出查询到的工作项ID
print([item.id for item in query_result.work_items])

无工作项ID获取工作项说明

不需要提前知道工作项ID就可以查询工作项,直接调整WIQL语句的查询条件即可,比如要查询项目下所有激活状态的用户故事,可直接写:

SELECT [System.Id], [System.Title], [System.State] FROM WorkItems WHERE [System.WorkItemType] = 'User Story' AND [System.State] = 'Active'

查询返回结果后就可以拿到所有匹配条件的工作项ID、标题等字段内容。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.24 13:36:02