如何将原始有效负载/请求正文发送给Axios?
我尝试调用的端点期望请求正文只是一个它可以挖掘并使用的字符串。
如果我尝试将axios.post()
的字符串传递给requestBody
,它会将其转换为没有值的对象({ "this+is+my+message": "" }
),最后会被解析像这样"this+is+my+message="
。
我检查了文档,但找不到任何似乎有效的选项。 transformRequest
似乎是最明显的,但它发送了字符串,我发出了字符串(字面意思d => d
),但它似乎仍然将它转换为无值的JSON对象。
答案 0 :(得分:8)
事实证明,如果我将Content-Type
标头设置为text/plain
,它将不会将其转换为JSON或表单数据,并将根据需要发送它。
axios.post('/my-url', 'my message text', {
headers: { 'Content-Type': 'text/plain' }
});
答案 1 :(得分:2)
当我在这里遇到类似的问题时,我想提供一个额外的答案。我正在加载一个图像文件(来自<input type="file>
元素)并使用axios将其发送到服务器 - 但是作为原始体,而不是将其包装在multipart/form-data
请求中。
似乎在原始数据的情况下,如果数据是在ArrayBuffer
中提供的,则axios最有效。这可以通过例如实现。使用以下代码片段(ES6):
const myFile = getMyFileFrom Somewhere()
const reader = new FileReader()
reader.onload = () => {
const result = reader.result
const headers = {
'Content-Type': file.type,
'Content-Disposition': 'attachment; filename="' + file.name + '"'
}
axios.post('/upload', result, { headers: headers })
}
(以这种方式使用Content-Type
标题稍微不标准,但在我的情况下仅用作传输原始文件名的方式)
请参阅:
https://github.com/axios/axios#request-config - data
的说明
https://developer.mozilla.org/en-US/docs/Web/API/FileReader/readAsArrayBuffer