如何防止 Axios 对我的请求参数进行编码?

How to prevent Axios from encoding my request parameters?

我试图通过 GET 请求中的 URL 参数传递一个 API 键。

但是,我注意到 Axios 在发送请求时对我的 API 键中的字符进行了编码。这导致 API 拒绝我的请求,因为它无法识别我的密钥。

如何防止 Axios 对我的 GET 参数进行编码?

您可以使用自定义参数序列化程序,如下所示:

axios.get('https://foobar.com/api', {
  paramsSerializer: function(params) {
    var result = '';
    // Build the query string 
    return result;
  }
});

paramsSerializer可以在实例级别设置:

var instance = axios.create({ paramsSerializer: function(params) { /* ... */ } })

或在全球范围内:

axios.defaults.paramsSerializer = function(params) { /* ... */ };

另一种选择是直接将 api 键添加到 URL:

axios.get('https://foobar.com/api?api_key=' + key);

您可以使用“params”配置选项添加其他参数:

axios.get('https://foobar.com/api?api_key=' + key, {
  params: {
    foo: 'bar'
  }
});

如果您正在使用 qs 库(或类似的编码库),您也可以执行

import qs from 'qs';

axios.get('https://foobar.com/api', {
    params,
    paramsSerializer: (params) => qs.stringify(params, { encode: false }),
});