升级至Autodesk .NET SDK(OssClient)后含空格文件名签名URL创建失败问题
解决Autodesk .NET SDK OssClient签名URL含空格文件无法访问的问题
原因分析
新版Autodesk .NET SDK的OssClient.CreateSignedResourceAsync()方法未自动处理对象键(objectKey)中的空格字符,生成的签名URL保留了原始空格,而Autodesk OSS服务端要求空格需以%20编码形式存在,导致访问时返回"object not found"。旧版Forge SDK及原生Object API会自动完成该编码步骤,因此无此问题。
手动编码对象键
调用SDK方法前,对含空格的objectKey单独进行URL编码,再传入方法:
using System; using Autodesk.Forge; using Autodesk.Forge.Model; // 原始含空格的对象键 string originalObjectKey = "sample file with spaces.txt"; // 对对象键进行URL编码 string encodedObjectKey = Uri.EscapeDataString(originalObjectKey); // 调用签名方法,传入编码后的键 var signedResult = await ossClient.CreateSignedResourceAsync( bucketKey: "your-target-bucket", objectKey: encodedObjectKey, expiresIn: 3600, // 签名有效期,单位秒 verb: HttpVerb.GET // 根据需求选择HTTP方法 ); // 生成的URL已包含正确编码的空格,可直接使用 string validSignedUrl = signedResult.SignedUrl;
升级SDK版本
若手动编码后问题仍存在,建议升级至最新版的Autodesk.Forge NuGet包,部分早期版本的SDK存在编码逻辑缺陷,新版本已修复此类兼容问题。
注意事项
- 仅对objectKey单独编码,不要对生成的签名URL进行二次编码
- 除空格外,对象键中的其他特殊字符(如中文、
/、?等)也需用Uri.EscapeDataString()编码
内容的提问来源于stack exchange,提问作者Oleh
相关产品推荐
相关产品推荐

