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

调用ModelDerivativeClient接口返回401错误的技术咨询

问题

基于HubsBrowser示例扩展开发,目标是通过Web应用浏览ACC中的模型,并使用FetchSpecificPropertiesAsync提取选中模型的所有属性,目前已完成:

  • 获取3-legged token,可正常浏览项目/文件夹/文件
  • 点击文件特定版本可在Viewer中展示
  • 尝试使用InternalToken调用Model Derivative API的GetManifestAsync(传入文件URN的Base64编码)时,返回401未授权错误

疑问:

  1. 是否可默认ACC文件已完成翻译,无需处理翻译或存储桶操作?
  2. 通过ACC文件URN能否直接访问其manifest?
  3. 是否缺少Model Derivative API所需的权限范围?

当前代码

控制器代码

[HttpGet("{objectId}/modelviews")]
public async Task<ActionResult> GetModelViews(string objectId)
{
    //Eg objectId: urn:adsk.wipprod:fs.file:vf.bOz5StqZQoqUqQLDlxdrSg
    var tokens = await AuthController.PrepareTokens(Request, Response, _aps);
    var modelViews = await _aps.GetManifestAsync(objectId, tokens);
    return Ok(modelViews);
}

服务调用代码

public partial class APS
{
    public static string Base64Encode(string plainText)
    {
        var plainTextBytes = System.Text.Encoding.UTF8.GetBytes(plainText);
        return System.Convert.ToBase64String(plainTextBytes).TrimEnd('=');
    }

    public async Task<Manifest> GetManifestAsync(string objectId, Tokens tokens)
    {
        var modelDerivativesClient = new ModelDerivativeClient();
        var modelUrn = Base64Encode(objectId);

        try
        {
            var manifest = await modelDerivativesClient.GetManifestAsync(modelUrn, accessToken: tokens.InternalToken);
            return manifest;
        }
       
        catch(Exception ex)
        {
            

        }
        return null;
        
    }
}

错误信息:Unauthorized 401


解答

  1. ACC文件翻译状态:是的,ACC中上传的标准格式文件(如Revit、AutoCAD等)会自动触发翻译流程,默认已完成翻译,无需手动处理翻译任务或存储桶相关操作,除非是特殊格式或手动取消了自动翻译。

  2. ACC文件URN访问manifest:可以直接访问。ACC文件的URN(如示例中的urn:adsk.wipprod:fs.file:vf.bOz5StqZQoqUqQLDlxdrSg)经过正确的Base64编码后,可直接作为Model Derivative API的urn参数使用。

  3. 权限范围问题:401错误大概率是权限不足导致。Model Derivative API需要以下权限范围:

    • data:read:用于读取模型数据及manifest
    • 若后续要提取模型属性,还需data:search权限
      检查你的应用权限配置,确保已包含上述范围;同时确认3-legged token在用户授权时已获取到这些权限,InternalToken需包含对应权限范围才能调用成功。
  4. 额外排查点:

    • 修正Base64编码逻辑:需要做URL安全的Base64编码,即把标准Base64中的+替换为-,/替换为_,再去掉末尾的=。当前代码仅去掉了=,可能导致API无法正确识别URN
    • 验证token有效性:确认调用GetManifestAsync时,InternalToken未过期,且对应正确的用户和项目上下文

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.15 07:47:21