axios 没有覆盖默认 content-type header 到

axios not overriding default content-type header to

在我的 CRA 项目中,我设置了 axios 的默认值(在根 index.js 文件中)

axios.defaults.headers = {
    "Content-type": "application/json",
    "Accept": "application/hal+json"
};

现在我想在项目的某个地方发送 Content-type : application/x-www-form-urlencoded 请求,但 axios 仍在发出 application/json 请求。

const data = new URLSearchParams()
data.append('existingPassword', existingPassword)
data.append('newPassword', newPassword)

axios.post("http://localhost:8085/api/password-reset", data, {headers: {'Content-Type': 'application/x-www-form-urlencoded'}})

如果我注释掉默认值,这个请求就可以正常工作。另外,如果使用 Content-type : multipart/form-data 那么默认值也会被覆盖。

axios 版本0.20.0
反应版本 16.13.1

这可能是什么问题?

由于默认content-type header使用键Content-type并且axios调用传递键Content-Type,所以header不会合并.将默认的 content-type header 键重命名为 'Content-Type'.

axios.defaults.headers = {
  'Content-Type': 'application/json',
  // ...
}

Also, if the use Content-type : multipart/form-data then also defaults get override.

因为您使用了 Content-type,它与默认 headers 中使用的密钥相同。