Forge Model Derivatives:GET metadata接口始终返回202状态码求助
解决大尺寸NWD文件GET metadata接口返回202的问题
问题原因
大尺寸NWD文件的元数据解析属于异步处理流程,首次请求接口返回202 Accepted+{"result":"success"},说明后台正在执行元数据生成任务,此时还无法返回完整的模型树数据。
解决方案
- 移除冗余请求头
GET请求无需设置Content-Type头(无请求体场景下该头无效),删除代码中这一行:
request.AddHeader("Content-Type", "application/json");
- 实现轮询逻辑
收到202响应时,间隔3-5秒重新发起请求,直到接口返回200 OK并返回模型树数据。修改后的代码示例:
RestClient client = new RestClient("https://developer.api.autodesk.com"); RestRequest request = new RestRequest("/modelderivative/v2/designdata/{urn}/metadata/{modelGuid}", Method.Get); request.AddHeader("Authorization", "Bearer " + authenticate.access_token); // 若怀疑元数据缓存异常,可启用此头强制重新生成 // request.AddHeader("x-ads-force", "true"); request.AddParameter("urn", urn, ParameterType.UrlSegment); request.AddParameter("modelGuid", guid, ParameterType.UrlSegment); request.AddParameter("forceget", true, ParameterType.QueryString); request.AddParameter("objectid", 1, ParameterType.QueryString); request.AddParameter("level", 1, ParameterType.QueryString); System.Net.HttpStatusCode statusCode; string responseContent = string.Empty; // 可根据文件大小调整最大重试次数 int maxRetries = 20; int retryCount = 0; do { var response = await client.ExecuteAsync(request); statusCode = response.StatusCode; responseContent = response.Content; if (statusCode == System.Net.HttpStatusCode.Accepted) { retryCount++; // 等待5秒后重试,避免触发限流 await Task.Delay(5000); } } while (statusCode == System.Net.HttpStatusCode.Accepted && retryCount < maxRetries); if (statusCode == System.Net.HttpStatusCode.OK) { // 反序列化响应内容,提取第一层节点的dbid和名称 } else { // 处理请求超时或失败的情况 }
- 额外检查点
- 若多次轮询仍返回202,可调用
GET /modelderivative/v2/designdata/{urn}/manifest接口确认文件转换任务是否完成; - 轮询间隔不要过短,避免触发服务限流机制。
内容的提问来源于stack exchange,提问作者anfleta
相关产品推荐
相关产品推荐

