使用C#调用ACC Issues API创建问题时遇请求验证失败
问题排查与解决方案
一、请求验证失败原因及修复
核心问题分析
返回的验证错误提示缺少title、issueSubtypeId、status三个必填字段,根源有两点:
- 请求体未传入API:代码中构造了请求体对象,但没有调用方法将其添加到
RestRequest中,导致实际发送的请求体为空,API无法识别必填字段。 - 字段名拼写错误:代码里写的
issuesubTypeId是小写s,而ACC Issues API要求的字段名是issueSubtypeId(大写S),拼写错误会导致字段不被识别。
修复后的代码
public async Task<RestResponse> PostIssuesAsync(string userAccessToken, string projectId, string subTypeId, string title, string description, string itemId) { string BASE_URL = "https://developer.api.autodesk.com"; string POST_ISSUES = "/construction/issues/v1/projects/{projectId}/issues"; string projectIdEdited = projectId.Split(".")[1]; RestClient client = new RestClient(BASE_URL); RestRequest request = new RestRequest(POST_ISSUES, Method.Post); request.AddParameter("projectId", projectIdEdited, ParameterType.UrlSegment); request.AddHeader("Authorization", "Bearer " + userAccessToken); request.AddHeader("Content-Type", "application/vnd.api+json"); dynamic body = new JObject(); body.data = new JObject(); body.data.type = "issues"; body.data.attributes = new JObject(); body.data.attributes.title = title; body.data.attributes.description = description; body.data.attributes.issueSubtypeId = subTypeId; // 修正字段名大小写 body.data.attributes.published = true; body.data.attributes.status = "open"; body.data.attributes.locationId = itemId; // 启用位置关联 // 关键:将构造好的请求体添加到请求中 request.AddJsonBody(body); return await client.ExecuteAsync(request); }
二、Revit模型位置信息关联实现
要让ACC Issues在Revit中高亮对应位置,需正确设置locationId字段,步骤如下:
- 获取模型与元素标识
- 从ACC Data Management API获取目标Revit模型的URN(格式类似
dXJuOmFkc2sub2JqZWN0czpvcy5vYmplY3Q6bXktcHJvamVjdC9tYXN0ZXIucnZ0)。 - 在Revit中获取目标元素的Element ID(纯数字,如
12345)。
- 从ACC Data Management API获取目标Revit模型的URN(格式类似
- 构造locationId
格式为:urn:adsk.wipprod:fs.file:<模型URN>::<Element ID>,示例:urn:adsk.wipprod:fs.file:dXJuOmFkc2sub2JqZWN0czpvcy5vYmplY3Q6bXktcHJvamVjdC9tYXN0ZXIucnZ0::12345 - 关联到Issue
将上述构造的locationId传入请求体的attributes中,如修复代码中所示,创建完成后即可在Revit中定位并高亮对应元素。
额外注意:确保用户AccessToken拥有data:write和data:read权限,且projectId、subTypeId、locationId均为ACC系统内的有效标识。
内容的提问来源于stack exchange,提问作者John Kuldeep Roshan Kerketta
相关产品推荐
相关产品推荐

