Axios POST请求未添加Content-Type报415错误,请求格式是否正确?
Axios POST请求Content-Type不显示及415错误的解决方法
你的请求格式存在两个关键问题,直接导致了Content-Type不生效和415状态码错误:
问题根源
手动设置
multipart/form-data干扰Axios自动处理
Axios处理文件上传时,若检测到请求数据是FormData类型,会自动生成带boundary分隔符的Content-Type(比如multipart/form-data; boundary=----WebKitFormBoundaryxxx)。但你手动硬编码了Content-Type却未添加boundary,服务器无法解析表单结构,直接返回415;同时这种手动设置还可能被Axios内部逻辑覆盖,导致请求头里看不到该字段。文件数据未包装成FormData对象
你直接把{file: file}作为data传入,这是普通JS对象,Axios不会识别为表单数据,自然也不会触发自动设置Content-Type的逻辑。
修复后的代码
let api_post_request = async (resourcePath, params, file, options) => { let headers = { ...getAccessToken() // 保留Bearer令牌的Authorization头 // 移除手动设置的Content-Type,让Axios自动处理 }; let requestData = {}; // 处理文件:包装成FormData对象 if (file) { const formData = new FormData(); formData.append('file', file); requestData.data = formData; } // 处理URL参数:空值时传空对象而非空字符串 if (params) { requestData.params = params; } try { await axios({ method: 'post', headers: headers, baseURL: `${Constants.PATH.BASE_URL}`, url: `${resourcePath}`, ...requestData }); } catch (error) { // 建议添加错误处理,便于排查请求失败细节 console.error('请求失败:', error.response?.data || error.message); } };
额外说明
- 使用
FormData时,Axios会自动添加正确的Content-Type头(包含boundary),此时网络面板就能看到完整的Content-Type字段。 - 原代码中
...(params ? { params: params } : "")的写法存在隐患,空字符串不是合法的对象展开值,改为判断后传空对象更安全。 - 415错误本质是服务器无法识别请求的媒体类型,修复Content-Type和请求数据格式后即可解决。
内容的提问来源于stack exchange,提问作者Learner
相关产品推荐
相关产品推荐

