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

调用Autodesk刷新Token接口时遭遇content-type header错误求助

问题分析与解决

你遇到的核心问题是Axios请求参数的位置错误:Autodesk的OAuth刷新令牌接口要求参数以application/x-www-form-urlencoded格式放在POST请求体中,但你的代码把参数放到了params字段里——这个字段对应的是URL的查询参数(即?key=value形式),而非请求体内容,所以接口会判定你没有正确传递参数,同时返回Content-Type相关的错误提示。

解决步骤

  • 将参数从params移到data字段:Axios的post方法第二个参数是请求体数据,第三个才是配置项(headers等)。
  • 正确序列化请求体:因为接口要求application/x-www-form-urlencoded格式,需要将参数对象序列化为url编码的字符串,可使用qs库或原生URLSearchParams实现。

修改后的代码示例

方式1:使用qs库(需先执行npm install qs安装)

const qs = require('qs');

bim360Router.use(async (req, res, next) => {
    let accessToken = req.cookies['access_token'];
    let refresh_token = req.cookies['refresh_token'];
    if(refresh_token && !accessToken) { 
         const data = qs.stringify({
            client_id: process.env.FORGE_CLIENT_ID,
            client_secret: process.env.FORGE_CLIENT_SECRET,
            refresh_token: refresh_token,
            grant_type: 'refresh_token',
        });
        const config ={
            headers : {
                'Content-Type': 'application/x-www-form-urlencoded',
            }
        };
        const response = await axios.post(
            'https://developer.api.autodesk.com/authentication/v1/authenticate',
            data,
            config
        );
        accessToken = response.data.access_token;
        res.cookie('access-token', accessToken, { maxAge: 60 * 60 * 1000, httpOnly: true });
        console.log("middleware", response.data);
    }
    next();
});

方式2:使用原生URLSearchParams(无需额外安装依赖)

bim360Router.use(async (req, res, next) => {
    let accessToken = req.cookies['access_token'];
    let refresh_token = req.cookies['refresh_token'];
    if(refresh_token && !accessToken) { 
         const data = new URLSearchParams({
            client_id: process.env.FORGE_CLIENT_ID,
            client_secret: process.env.FORGE_CLIENT_SECRET,
            refresh_token: refresh_token,
            grant_type: 'refresh_token',
        });
        const config ={
            headers : {
                'Content-Type': 'application/x-www-form-urlencoded',
            }
        };
        const response = await axios.post(
            'https://developer.api.autodesk.com/authentication/v1/authenticate',
            data,
            config
        );
        accessToken = response.data.access_token;
        res.cookie('access-token', accessToken, { maxAge: 60 * 60 * 1000, httpOnly: true });
        console.log("middleware", response.data);
    }
    next();
});

为什么curl能正常运行?

你用curl测试时,-d参数是直接把参数放到POST请求体中,并且curl会自动设置正确的Content-Type: application/x-www-form-urlencoded,完全匹配接口要求的格式,所以能成功获取令牌。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.20 16:52:08