Autodesk Forge调用[GET]/activities/:id获取指定活动返回400错误如何解决
问题原因
- .NET平台默认的URI解析逻辑会自动将路径段中已编码的
%2b解码为+,而Forge Design Automation接口对路径参数中的+字符校验严格,会将未编码的+识别为非法字符,直接返回400错误。 - 带
+$LATEST后缀的活动ID属于动态版本别名,接口对这类ID的编码要求比固定版本号ID更高,这也是其他不带该后缀的活动可以正常查询的核心原因。
解决方案
针对C#开发环境,可以通过以下方法解决:
- 禁用.NET的URI自动解码规则
在程序初始化阶段添加全局配置,关闭路径自动解码功能:
// 适用于.NET Framework 4.5+及.NET Core 2.0+ AppContext.SetSwitch("System.Uri.DisableBackslashEncoding", true); AppContext.SetSwitch("System.Uri.DontEnableStrictRFC3986ReservedCharacterSets", true);
- 手动构造请求地址跳过自动编码
不要通过Uri类自动处理路径,直接将手动编码后的活动ID拼接到请求地址中:
// 对活动ID进行RFC3986标准编码 var rawActivityId = "GZZQabcdefghijklmnopqrNroJTafTze.DeleteWallsActivity+$LATEST"; var encodedActivityId = Uri.EscapeDataString(rawActivityId); var requestUrl = "https://developer.api.autodesk.com/da/us-east/v3/activities/" + encodedActivityId; // 使用HttpClient发送请求示例 using var client = new HttpClient(); client.DefaultRequestHeaders.Authorization = new System.Net.Http.Headers.AuthenticationHeaderValue("Bearer", "你的访问令牌"); var response = await client.GetAsync(requestUrl);
- 临时验证方案
可以先将+$LATEST替换为该活动对应的固定版本号(例如+1、+2,可从活动列表接口的返回结果中查询到),验证接口可正常返回后再调整编码逻辑。
内容的提问来源于stack exchange,提问作者Bertil de Groot
相关产品推荐
相关产品推荐

