Vue使用axios请求报Uncaught (in promise) status code 415如何解决?
错误原因
HTTP 415 状态码全称是 Unsupported Media Type,意为服务器不支持当前请求所携带的媒体格式,核心问题出在请求头的Content-Type配置和后端接口要求的格式不匹配,或是提交的数据结构不符合接口要求。
解决方案
- 先确认后端接口要求的请求数据格式:常见的格式有三种,对应不同的配置方案
- 接口要求
application/json格式(绝大多数前后端分离场景的默认要求)
axios默认提交的就是该格式,如果你自定义的shaxios修改过全局配置,可手动在请求时指定headers:
Login (data) { return shaxios.post('api/Auth/Authorize', data, { headers: { 'Content-Type': 'application/json' } }) }- 接口要求
application/x-www-form-urlencoded表单格式
需要先将提交的数据用qs库序列化后再传输:
import qs from 'qs' Login (data) { return shaxios.post('api/Auth/Authorize', qs.stringify(data), { headers: { 'Content-Type': 'application/x-www-form-urlencoded' } }) }- 接口要求
multipart/form-data格式(含文件上传的场景)
需要用FormData包装提交的所有参数:
Login (data) { const formData = new FormData() // 遍历参数填入FormData Object.keys(data).forEach(key => { formData.append(key, data[key]) }) return shaxios.post('api/Auth/Authorize', formData, { headers: { 'Content-Type': 'multipart/form-data' } }) } - 接口要求
- 检查
shaxios的全局请求拦截器配置,确认没有覆盖修改请求头的Content-Type字段,或是错误转换了请求体数据格式。
额外优化提示
你当前外层封装的Promise逻辑可简化,无需额外嵌套一层Promise,直接返回authService.Login(user)的返回值即可,避免不必要的Promise嵌套导致的未捕获异常风险。
内容的提问来源于stack exchange,提问作者nikoloz gabidzashvili
相关产品推荐
相关产品推荐

