Reactjs 无法在axios中设置标头

Reactjs 无法在axios中设置标头,reactjs,ecmascript-6,axios,Reactjs,Ecmascript 6,Axios,我无法通过axios设置标题,例如内容类型为application/json。axios没有引发异常,但请求在浏览器中得到“415不支持的媒体类型”响应。有什么线索表明我犯了什么错误吗 下面是代码- 我尝试了两种方法 方法1- import axios from 'axios'; axios.defaults.headers.common['Content-Type'] = 'application/json'; axios.get(url).then( response => thi

我无法通过axios设置标题,例如内容类型为application/json。axios没有引发异常,但请求在浏览器中得到“415不支持的媒体类型”响应。有什么线索表明我犯了什么错误吗

下面是代码-

我尝试了两种方法

方法1-

import axios from 'axios';
axios.defaults.headers.common['Content-Type'] = 'application/json';
axios.get(url).then(
  response => this.loadData(response)).catch(
  (error) => this.showError(error));
方法2-

let config = {
    headers: {
        "Access-Control-Allow-Origin": "*",
        "Content-Type": "application/json"
    }
};
axios.get(url, config).then(
      response => this.loadData(response)).catch(
      (error) => this.showError(error));

您之所以会出现此错误,是因为您没有将
Accept
标题设置为期望服务器响应的正确内容类型

为了避免这种情况,例如,您可以创建一个Axios实例(稍后在React.js应用程序中进行Axios调用的任何地方导入该实例),在该实例中,您可以设置将使用Axios进行的所有调用的默认头。例如:

import axios from 'axios';

const instance = axios.create({
  baseURL: [YOUR BASE URL],
  timeout: 5000,
  headers: {
    'Accept-Version': 1,
    'Accept': 'application/json',
    'Access-Control-Allow-Origin': '*',
    'Content-Type': 'application/json; charset=utf-8',
  },
});

export default instance;

因此,您所做的所有调用都将具有正确的头,您不必担心它们是否被正确设置。我还假设您只需要处理json正文请求和响应。

不需要设置内容类型application/json,它会自动设置另一个标头访问控制Allow Origin,需要允许从后端服务器(express)进行访问不是从你的react应用程序中。请尝试删除两个标题。我认为你不是。此处是否需要内容类型?在我看来,问题似乎是使用内容类型而不是接受。内容类型通常不应与get请求一起使用。您是对的,对于get请求,不需要
内容类型
,但我为所有类型的请求提出了一个通用解决方案,这样OP就不需要担心在所有调用中设置正确的头。这里出现的问题确实与缺少“Accept”标题有关,因此我将重写答案以突出显示它。@Dez由于某种原因,我正在使用的web服务似乎配置不正确。即使在postman中,只有当我在Get请求中指定
内容类型时,我才能得到正确的响应,否则我会得到错误。您的上述解决方案无助于设置标题。在浏览器中,我的请求在选项级别本身失败。如果您收到的是选项请求而不是GET请求,则您的CORS存在问题。是的,我使用的服务存在CORS问题。但同时,创建axios实例也很有帮助。谢谢